`
wangchao_17915566
  • 浏览: 169561 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

flash as3 的socket聊天

阅读更多

最近一直学习flash as3

今天跟着网上做了一个flash socket 聊天,主要了解下flash如何与java的socket通信。

一段代码CustomSocket.as

package  
{
	import flash.events.*;
    import flash.net.Socket;
    import flash.system.*;
    import flash.utils.ByteArray;
    import flash.utils.setTimeout;
    
    import fl.controls.TextArea;
    import fl.core.UIComponent;
	/**
	* ...
	* @author DefaultUser (Tools -> Custom Arguments...)
	*/
	public class CustomSocket
	{
		private const CR:int = 13; // Carriage Return (CR)
        private const WILL:int = 0xFB; // 251 - WILL (option code)
        private const WONT:int = 0xFC; // 252 - WON'T (option code)
        private const DO:int   = 0xFD; // 253 - DO (option code)
        private const DONT:int = 0xFE; // 254 - DON'T (option code)
        private const IAC:int  = 0xFF; // 255 - Interpret as Command (IAC)
		
		
		private var serverURL:String;
		private var portNumber:int;
		private var socket:Socket;
		private var ta:TextArea;
		private var state:int = 0;
		System.useCodePage = false;
		public function CustomSocket(server:String, port:int, output:TextArea) 
		{
			serverURL = server;
			portNumber = port;
			ta = output;			
			socket = new Socket();
            socket.addEventListener(Event.CONNECT, connectHandler);			
            socket.addEventListener(Event.CLOSE, closeHandler);
            socket.addEventListener(ErrorEvent.ERROR, errorHandler);
            socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            socket.addEventListener(ProgressEvent.SOCKET_DATA, dataHandler);
			
			Security.loadPolicyFile("http://" + serverURL + ":" + portNumber + "/crossdomain.xml");
			
			try
			{ 
				msg("Trying to connect to" + serverURL + ":" + portNumber + "\n");
				socket.connect(serverURL,portNumber);
			}
			catch (error:Error)
			{
				msg(error.message + "\n");
                socket.close();
			}
		}
		public function ioErrorHandler(event:IOErrorEvent):void
		{
			msg("Unable to connect: socket error.\n");
		}
		 public function writeBytesToSocket(ba:ByteArray):void {
			 trace(ba);
            socket.writeBytes(ba);
            socket.flush();
        }
		 private function connectHandler(event:Event):void {			
            if (socket.connected) {
                msg("connected...\n");				
            } else {
                msg("unable to connect\n");
            }
        }        
		private function closeHandler(event:Event):void
		{
			 msg("closed...\n");
		}
		 private function errorHandler(event:ErrorEvent):void {
            msg(event.text + "\n");
        }
	    private function dataHandler(event:ProgressEvent):void {
            var n:int = socket.bytesAvailable;			
            // Loop through each available byte returned from the socket connection.
            while (--n >= 0) {
                // Read next available byte.
                var b:int = socket.readUnsignedByte();				
                switch (state) {
                    case 0:
                        // If the current byte is the "Interpret as Command" code, set the state to 1.
                        if (b == IAC) {
                            state = 1;
                        // Else, if the byte is not a carriage return, display the character using the msg() method.
                        } else if (b != CR) {
                            msg(String.fromCharCode(b));
							}
                        break;
                    case 1:
                        // If the current byte is the "DO" code, set the state to 2.
                        if (b == DO) {
                            state = 2;
                        } else {
                            state = 0;
                        }
                        break;
                    // Blindly reject the option.
                    case 2:
                        /*
                            Write the "Interpret as Command" code, "WONT" code, 
                            and current byte to the socket and send the contents 
                            to the server by calling the flush() method.
                        */
                        socket.writeByte(IAC);
                        socket.writeByte(WONT);
                        socket.writeByte(b);
                        socket.flush();
                        state = 0;
                        break;
                }
            }
        }
		private function msg(value:String):void {			
            ta.text += value;
            ta.dispatchEvent(new Event(Event.CHANGE));
            setTimeout(setScroll, 100);
        }
		 public function setScroll():void {
            ta.verticalScrollPosition = ta.maxVerticalScrollPosition;
        }		
	}
	
}

 这个as有的地方没有理解:初始化定义常量时,不知道为什么定义?希望有人能够解释下,小弟不胜感激。

 下面还有个Main .as

package 
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.utils.ByteArray;
	import CustomSocket;
	
	public class Main extends Sprite
	{	
		private var telnetClient:CustomSocket;

		public function Main() {
			setupUI();
		}
		private function connect(e:MouseEvent):void {
			//建立socket通信的链接
			telnetClient = new CustomSocket(serverName.text, int(portNumber.text), output);
		}
		private function sendCommand(e:MouseEvent):void {			
			var ba:ByteArray = new ByteArray();
			//将得到的信息写入ba中
			ba.writeMultiByte(command.text + "\n", "GBK");	
			//通过连接写入socket中
			telnetClient.writeBytesToSocket(ba);
			command.text = "";
		}
		private function setupUI():void {
			loginBtn.addEventListener(MouseEvent.CLICK,connect)	
			sendBtn.addEventListener(MouseEvent.CLICK,sendCommand);
		}	
	}
}

 最后看看java服务器端

代码一:

简单的MyServer .java

package com.cn.socket;

import java.io.*; 
import java.net.*; 
public class MyServer 
{ 
public static void main (String[] args) throws IOException 
{ 
	ServerSocket server=new ServerSocket(4567); 
	Socket client=server.accept(); 
	BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream())); 
	PrintWriter out=new PrintWriter(client.getOutputStream()); 
	while(true) 
	{ 
		String str=in.readLine(); 
		System.out.println(str); 
		out.println("你 说:  " + str + "\n"); 
		out.flush(); 
	if(str.equals("end")) 
	break; 
	} 
	client.close(); 
	} 
}

  这个服务器端只能连接一段时间后自动停止。

服务器端代码二:

package com.cn.socket;

import java.io.IOException; 
import java.net.*; 
import java.util.concurrent.*; 
  
public class MultiThreadServer { 
    private int port=4567; 
    private ServerSocket serverSocket; 
    private ExecutorService executorService;//线程池 
    private final int POOL_SIZE=10;//单个CPU线程池大小 
     
    public MultiThreadServer() throws IOException{ 
        serverSocket=new ServerSocket(port); 
        //Runtime的availableProcessor()方法返回当前系统的CPU数目. 
        executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE); 
        System.out.println("服务器启动"); 
    } 
     
    public void service(){ 
        while(true){ 
            Socket socket=null; 
            try { 
                //接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接 
                socket=serverSocket.accept(); 
                executorService.execute(new Handler(socket)); 
                 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
        } 
    } 
     
    public static void main(String[] args) throws IOException { 
        new MultiThreadServer().service(); 
    } 
  
} 
  

 

package com.cn.socket;
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.PrintWriter; 
import java.net.*; 

public class Handler implements Runnable{ 
    private Socket socket; 
    public Handler(Socket socket){ 
        this.socket=socket; 
    } 
    private PrintWriter getWriter(Socket socket) throws IOException{ 
        OutputStream socketOut=socket.getOutputStream(); 
        return new PrintWriter(socketOut,true); 
    } 
    private BufferedReader getReader(Socket socket) throws IOException{ 
        InputStream socketIn=socket.getInputStream(); 
        return new BufferedReader(new InputStreamReader(socketIn)); 
    } 
    public String echo(String msg){ 
        return "echo:"+msg; 
    } 
    public void run(){ 
        try { 
            System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort()); 
            BufferedReader br=getReader(socket); 
            PrintWriter pw=getWriter(socket); 
            String msg=null; 
            while((msg=br.readLine())!=null){ 
                System.out.println(msg); 
                pw.println(echo(msg)); 
                if(msg.equals("bye")) 
                    break; 
            } 
        } catch (IOException e) { 
            e.printStackTrace(); 
        }finally{ 
            try { 
                if(socket!=null) 
                    socket.close(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
        } 
    } 
}

 服务器二建立了线程数量,并且可以不断进行端口连接。

这两中服务器选其一就ok。

as3的技术很差,只是为了学习进步。

分享到:
评论
1 楼 foodyi 2009-02-06  
readUnsignedByte () 方法  

public function readUnsignedByte():uint

语言版本 :  ActionScript 3.0
RuntimeVersions:  AIR 1.0, Flash Player 9



从套接字读取一个无符号字节。

var b:int = socket.readUnsignedByte();   

返回socket几种状态的值.

相关推荐

    flash as3/java socket 聊天室

    标题中的“flash as3/java socket 聊天室”指的是使用Adobe Flash ActionScript 3(AS3)语言和Java的Socket编程技术实现的一个在线聊天应用程序。这个应用允许用户通过网络进行实时通信,创建一个基本的聊天环境。...

    基于Socket的as3的小型聊天室

    【标题】"基于Socket的as3的小型聊天室"是一个使用ActionScript 3(AS3)编程语言开发的网络通信应用实例,它构建了一个简单的聊天室客户端。在互联网编程中,Socket是实现客户端与服务器之间实时通信的基础技术,它...

    ActionScript简单的Socket聊天室系统

    在本项目中,“ActionScript简单的Socket聊天室系统”是利用ActionScript 3.0(AS3.0)构建的一个基本的网络通信应用。这个系统依赖于Adobe Integrated Runtime (AIR) 来运行服务端,AIR允许开发人员创建桌面应用...

    Flash as3 无需数据库 在线聊天室

    1. **实时通信协议**:Flash AS3可以利用Socket或XMLSocket类实现实时双向通信。通过与服务器建立TCP连接,客户端和服务器之间可以交换数据,实现即时消息传递。 2. **内存数据管理**:聊天信息在服务器端和客户端...

    FLASH局域网免服务器P2P聊天室源码(as3+flash开发)

    【标题】"FLASH局域网免服务器P2P聊天室源码(as3+flash开发)" 涉及的核心技术主要包括ActionScript 3 (AS3)、P2P(点对点)通信以及局域网应用的开发。AS3是Adobe Flash Player支持的编程语言,用于创建交互式的...

    Flash的Socket应用(Server用C#)

    本文将深入探讨如何使用C#语言构建一个基于Flash Socket的服务器,以及AS3.0(ActionScript 3.0)在客户端的应用。 Flash Socket,也被称为“高级Socket”,是Flash Player提供的一个特性,允许Flash应用程序直接与...

    一个可以做AS3的前后端通信脚本

    1. `.actionScriptProperties`:这是Flash Builder或Flex Builder项目中的配置文件,包含了AS3项目的特定设置,如编译选项、库路径等。 2. `.flexProperties`:与`.actionScriptProperties`类似,也是项目配置文件,...

    AS3 SOCKET

    总的来说,AS3中的Socket技术提供了强大的网络通信功能,允许开发者构建实时的、数据密集型的应用程序,如在线游戏、聊天室或数据传输服务。然而,正确处理连接、数据交换和错误是确保程序稳定运行的关键。在实际...

    (AS3)socket+客户端与服务端+实例

    在AS3中,Socket类提供了一个与服务器进行双向通信的通道,这在创建实时互动的Flash应用时非常有用,如在线游戏、实时聊天或数据传输等。 标题"(AS3)socket+客户端与服务端+实例"指出我们将讨论如何使用AS3的...

    as3简单的聊天窗体组件

    AS3(ActionScript 3)是Adobe Flash Platform的主要编程语言,用于创建互动内容、富互联网应用程序(RIA)、桌面应用程序以及移动应用程序。在这个“as3简单的聊天窗体组件”项目中,我们可以推测它是一个使用AS3...

    as3 + fms3聊天室

    【标题】"AS3 + FMS3聊天室"是一个基于ActionScript 3(AS3)编程语言和Flash Media Server 3(FMS3)技术构建的在线聊天室应用。这个项目提供了一个简单但实用的平台,让多个用户可以实时交流分享信息。 【描述】...

    多个flash互相通信demo

    本示例"多个flash互相通信demo"探讨了如何利用AS3进行Socket编程,实现多个Flash实例之间的通信。 1. **Flash AS3基础知识**:AS3是ActionScript语言的第三个主要版本,引入了许多改进,包括类型检查、更好的错误...

    FlashSocket与C#通讯

    FlashSocket,全称Adobe Flash Socket,是Adobe Flash Player支持的一种高级网络功能,它允许Flash应用程序(SWF)直接与服务器进行低级TCP/IP通信。传统Web应用基于HTTP协议,而HTTP是无状态的,不适合持续的双向...

    as socket详解

    Socket类提供了双向数据流,允许应用程序发送和接收原始字节流,这使得它非常适合实时数据交换,如游戏、聊天应用或任何需要高效数据传输的场景。本篇文章将深入探讨如何使用AS Socket进行后台通信,以及涉及的主要...

    flash socket 分块下载源码

    本知识点将深入讲解使用AS3(ActionScript 3)实现的Flash Socket以及HTTP分块下载的原理和源码分析。 首先,AS3是Adobe Flash Player和Air平台支持的编程语言,主要用于创建富互联网应用(RIA)。Socket编程是AS3...

    一个as3+php实现的简单聊天室

    1. **客户端**:由AS3编写,展示聊天界面,处理用户输入,通过Socket连接与服务器通信。 2. **服务器端**:PHP脚本运行在Web服务器上,接收和响应客户端请求,处理数据交互,可能还包括与数据库的交互。 3. **...

    flash +asp.net Socket 简单聊天室实现

    利用socket开发的简单flash聊天室,后台使用c#开发socket服务器,例子比较简单,只是实现了socket与flash通信,相信大家会有启发。 资源内容: c#源程序和已经发布了的服务器: as3.0 测试源程序,

    Socket服务器跟Flash代码

    `SocketExample.as`是AS3(ActionScript 3)代码,AS3是Flash Professional和Flash Builder等工具使用的编程语言。在这个例子中,AS3代码可能包含了建立Socket连接、发送数据到服务器、接收服务器返回数据的逻辑。...

    Flash版在线聊天系统源代码

    在Flash中,ActionScript(AS)是主要的编程语言,AS3是其最新的版本,提供了面向对象的编程模型,具有更高效、更严谨的语法结构。 二、Flash中的网络通信——Socket和XMLSocket Flash版在线聊天系统的核心功能是...

    不错的as3聊天框实例

    AS3(ActionScript 3)是Adobe Flash Platform的主要编程语言,用于创建互动式网页内容、游戏和动画。在这个“不错的AS3聊天框实例”中,我们可以深入探讨如何使用AS3来构建一个基本的聊天应用程序。Flash.text是AS3...

Global site tag (gtag.js) - Google Analytics