当前位置: 代码迷 >> Flex >> Java与Flex建立Socket联接
  详细解决方案

Java与Flex建立Socket联接

热度:10217   发布时间:2013-02-26 00:00:00.0
Java与Flex建立Socket连接

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结尾发送数据

  相关解决方案