`
兩ting
  • 浏览: 75320 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

Java与Flex建立Socket连接

    博客分类:
  • flex
阅读更多

Socket与其他的通信技术最大的不同是Socket连接在数据传输完成后不会自动关闭,因此服务器可以在任何时间主动发送数据给客户端. 
Flex下Socket连接的方式有Socket和XMLSocket两种. 

读取数据使用的是异步的方式,需要监听对应的事件 
socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData ); 
xmlSocket.addEventListener( DataEvent.DATA, onData ); 

写入数据的方式 
socket下比较常用的是writeUTFBytes(String),writeMultiByte()可以自定义编码, 
使用flush()发送数据 
xmlScoket下 .send(String) 

连接Socket的方式 
socket.connect( "localhost", 2900 ); //代表地址和端口 

如果要跨域连接服务器,需要加载策略文件 
Security.loadPolicyFile("url/crossdomain.xml"); 

例子使用Java建立Socket服务器,然后使用Flex连接,并且进行数据交互 

Java代码  收藏代码
  1. package socket;  
  2.   
  3. import java.io.*;  
  4. import java.net.*;  
  5. import java.util.Scanner;  
  6.   
  7. public class SocketService {  
  8.     public static void main(String[] args) {  
  9.         try {  
  10.             System.out.println("启动ServerSocket..");  
  11.             int i=1;  
  12.             ServerSocket s=new ServerSocket(8189);  
  13.             while (true) {  
  14.                 Socket incoming=s.accept();  
  15.                 System.out.println("新用户"+i);  
  16.                 Runnable r=new ThreadEcho(incoming);  
  17.                 Thread t=new Thread(r);  
  18.                 t.start();  
  19.                 i++;  
  20.             }  
  21.         } catch (Exception e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.     }  
  25. }  
  26. class ThreadEcho implements Runnable  
  27. {  
  28.     private Socket incoming;  
  29.     public ThreadEcho(Socket s)  
  30.     {  
  31.         incoming=s;  
  32.     }  
  33.     public void run() {  
  34.         try {  
  35.             InputStream i=incoming.getInputStream();  
  36.             OutputStream o=incoming.getOutputStream();  
  37.             Scanner s=new Scanner(i);  
  38.             PrintWriter p=new PrintWriter(o);  
  39.             boolean done=false;  
  40.             while(!done && s.hasNext())  
  41.             {  
  42.                 String line=s.nextLine();  
  43.                 p.println("Echo"+line+"\n");  
  44.                 p.flush();  
  45.                 System.out.println("MSG"+line);  
  46.                 if(line.trim().equals("bye"))  
  47.                 {  
  48.                     done=true;  
  49.                 }  
  50.             }  
  51.             System.out.println("用户退出");  
  52.         } catch (Exception e) {  
  53.             e.printStackTrace();  
  54.         }finally  
  55.         {  
  56.             try {  
  57.                 incoming.close();  
  58.             } catch (IOException e) {  
  59.                 e.printStackTrace();  
  60.             }  
  61.         }  
  62.     }  
  63.       
  64. }  



Actionscript代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >  
  3. <mx:Script>  
  4.     <![CDATA[  
  5.     private var sock:Socket;  
  6.         private function connSocket():void  
  7.         {  
  8.             sock=new Socket();  
  9.             sock.addEventListener(Event.CONNECT,onConnect)  
  10.             sock.addEventListener(ProgressEvent.SOCKET_DATA,MSGHandler)  
  11.             sock.connect(adds.text,int(post.text));  
  12.         }  
  13.         private function onConnect(evt:Event):void  
  14.         {  
  15.             trace("Connection sucess");  
  16.         }  
  17.         private function sendMSG():void  
  18.         {  
  19.             sock.writeUTFBytes(mess.text+"\n");  
  20.             sock.flush();  
  21.             trace('send msg'+mess.text);  
  22.         }  
  23.         /**消息获取函数*/  
  24.         private function MSGHandler(event:ProgressEvent):void  
  25.         {  
  26.             trace("GetMSG"+sock.readUTFBytes(sock.bytesAvailable));  
  27.         }  
  28.     ]]>  
  29. </mx:Script>  
  30. <mx:Button label="连接服务器" click="connSocket()"/>  
  31. <mx:TextInput text="127.0.0.1" x="100" width="200" id="adds"/>  
  32. <mx:TextInput text="8189" x="300" id="post"/>  
  33. <mx:Button label="发送数据" click="sendMSG()" y="40"/>  
  34. <mx:TextInput id="mess" x="100" y="40"/>  
  35. </mx:Application>  



注意:需要使用手动的\n结尾发送数据

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics