加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash as3 的socket聊天

发布时间:2020-12-15 17:46:12 所属栏目:百科 来源:网络整理
导读:最近一直学习flash as3 今天跟着网上做了一个flash socket 聊天,主要了解下flash如何与java的socket通信。 一段代码CustomSocket.as Java代码?? package ???? {?? ???? import ?flash.events.*;?? import ?flash.net.Socket;?? import ?flash.system.*;?? i

最近一直学习flash as3

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

一段代码CustomSocket.as

Java代码??

收藏代码

  1. package????
  2. {??
  3. ????import?flash.events.*;??
  4. import?flash.net.Socket;??
  5. import?flash.system.*;??
  6. import?flash.utils.ByteArray;??
  7. import?flash.utils.setTimeout;??
  8. ??????
  9. import?fl.controls.TextArea;??
  10. import?fl.core.UIComponent;??
  11. ????/**?
  12. ????*?...?
  13. ????*?@author?DefaultUser?(Tools?->?Custom?Arguments...)?
  14. ????*/??
  15. public?class?CustomSocket??
  16. ????{??
  17. ????????private?const?CR:int?=?13;?//?Carriage?Return?(CR)??
  18. const?WILL:0xFB;?//?251?-?WILL?(option?code)??
  19. const?WONT:0xFC;?//?252?-?WON'T?(option?code)??
  20. const?DO:int???=?0xFD;?//?253?-?DO?(option?code)??
  21. const?DONT:0xFE;?//?254?-?DON'T?(option?code)??
  22. const?IAC:int??=?0xFF;?//?255?-?Interpret?as?Command?(IAC)??
  23. ??????????
  24. private?var?serverURL:String;??
  25. private?var?portNumber:int;??
  26. private?var?socket:Socket;??
  27. private?var?ta:TextArea;??
  28. private?var?state:0;??
  29. ????????System.useCodePage?=?false;??
  30. public?function?CustomSocket(server:String,?port:int,?output:TextArea)???
  31. ????????{??
  32. ????????????serverURL?=?server;??
  33. ????????????portNumber?=?port;??
  34. ????????????ta?=?output;??????????????
  35. ????????????socket?=?new?Socket();??
  36. ????????????socket.addEventListener(Event.CONNECT,?connectHandler);???????????
  37. ????????????socket.addEventListener(Event.CLOSE,?closeHandler);??
  38. ????????????socket.addEventListener(ErrorEvent.ERROR,?errorHandler);??
  39. ????????????socket.addEventListener(IOErrorEvent.IO_ERROR,?ioErrorHandler);??
  40. ????????????socket.addEventListener(ProgressEvent.SOCKET_DATA,?dataHandler);??
  41. ??????????????
  42. ????????????Security.loadPolicyFile("http://"?+?serverURL?+?":"?+?portNumber?+?"/crossdomain.xml");??
  43. ????????????try??
  44. ????????????{???
  45. ????????????????msg("Trying?to?connect?to"?+?serverURL?+?":"?+?portNumber?+?"n");??
  46. ????????????????socket.connect(serverURL,portNumber);??
  47. ????????????}??
  48. catch?(error:Error)??
  49. ????????????{??
  50. ????????????????msg(error.message?+?"n");??
  51. ????????????????socket.close();??
  52. ????????}??
  53. public?function?ioErrorHandler(event:IOErrorEvent):void??
  54. ????????????msg("Unable?to?connect:?socket?error.n");??
  55. ?????????public?function?writeBytesToSocket(ba:ByteArray):void?{??
  56. ?????????????trace(ba);??
  57. ????????????socket.writeBytes(ba);??
  58. ????????????socket.flush();??
  59. private?function?connectHandler(event:Event):void?{??????????????
  60. if?(socket.connected)?{??
  61. ????????????????msg("connected...n");????????????????
  62. ????????????}?else?{??
  63. ????????????????msg("unable?to?connectn");??
  64. ????????}??????????
  65. private?function?closeHandler(event:Event): ?????????????msg("closed...n");??
  66. private?function?errorHandler(event:ErrorEvent): ????????????msg(event.text?+?"n");??
  67. private?function?dataHandler(event:ProgressEvent): ????????????var?n:int?=?socket.bytesAvailable;????????????
  68. ????????????//?Loop?through?each?available?byte?returned?from?the?socket?connection.??
  69. while?(--n?>=?0)?{??
  70. ????????????????//?Read?next?available?byte.??
  71. ????????????????var?b:int?=?socket.readUnsignedByte();????????????????
  72. ????????????????switch?(state)?{??
  73. ????????????????????case?0:??
  74. ????????????????????????//?If?the?current?byte?is?the?"Interpret?as?Command"?code,?set?the?state?to?1.??
  75. ????????????????????????if?(b?==?IAC)?{??
  76. ????????????????????????????state?=?1;??
  77. //?Else,?if?the?byte?is?not?a?carriage?return,?display?the?character?using?the?msg()?method.??
  78. ????????????????????????}?else?if?(b?!=?CR)?{??
  79. ????????????????????????????msg(String.fromCharCode(b));??
  80. ????????????????????????????}??
  81. break;??
  82. 1:??
  83. //?If?the?current?byte?is?the?"DO"?code,?set?the?state?to?2.??
  84. if?(b?==?DO)?{??
  85. 2;??
  86. ????????????????????????}??
  87. ????????????????????//?Blindly?reject?the?option.??
  88. 2:??
  89. /*?
  90. ????????????????????????????Write?the?"Interpret?as?Command"?code,?"WONT"?code,??
  91. ????????????????????????????and?current?byte?to?the?socket?and?send?the?contents??
  92. ????????????????????????????to?the?server?by?calling?the?flush()?method.?
  93. ????????????????????????*/??
  94. ????????????????????????socket.writeByte(IAC);??
  95. ????????????????????????socket.writeByte(WONT);??
  96. ????????????????????????socket.writeByte(b);??
  97. ????????????????????????socket.flush();??
  98. ????????????????????????state?=? ????????????????}??
  99. private?function?msg(value:String):void?{?????????????
  100. ????????????ta.text?+=?value;??
  101. ????????????ta.dispatchEvent(new?Event(Event.CHANGE));??
  102. ????????????setTimeout(setScroll,?100);??
  103. public?function?setScroll(): ????????????ta.verticalScrollPosition?=?ta.maxVerticalScrollPosition;??
  104. ????????}?????????
  105. ????}??
  106. }??

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

?下面还有个Main .as

package???
  • import?flash.display.Sprite;??
  • import?flash.events.MouseEvent;??
  • import?CustomSocket;??
  • class?Main?extends?Sprite??
  • ????{?????
  • private?var?telnetClient:CustomSocket;??
  • ??
  • public?function?Main()?{??
  • ????????????setupUI();??
  • private?function?connect(e:MouseEvent)://建立socket通信的链接??
  • ????????????telnetClient?=?new?CustomSocket(serverName.text,?int(portNumber.text),?output);??
  • private?function?sendCommand(e:MouseEvent): ????????????var?ba:ByteArray?=?new?ByteArray();??
  • //将得到的信息写入ba中??
  • ????????????ba.writeMultiByte(command.text?+?"n",?"GBK");????
  • //通过连接写入socket中??
  • ????????????telnetClient.writeBytesToSocket(ba);??
  • ????????????command.text?=?"";??
  • private?function?setupUI(): ????????????loginBtn.addEventListener(MouseEvent.CLICK,connect)???
  • ????????????sendBtn.addEventListener(MouseEvent.CLICK,sendCommand);??
  • ????????}?????
  • ?最后看看java服务器端

    代码一:

    简单的MyServer .java

    package?com.cn.socket;??
  • import?java.io.*;???
  • import?java.net.*;???
  • class?MyServer???
  • {???
  • 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();???
  • ??这个服务器端只能连接一段时间后自动停止。

    服务器端代码二:

    import?java.io.IOException;???
  • import?java.util.concurrent.*;???
  • ????
  • class?MultiThreadServer?{???
  • int?port=4567;???
  • private?ServerSocket?serverSocket;???
  • private?ExecutorService?executorService;//线程池???
  • 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("服务器启动");???
  • void?service(){???
  • true){???
  • ????????????Socket?socket=null;???
  • try?{???
  • //接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接???
  • ????????????????socket=serverSocket.accept();???
  • ????????????????executorService.execute(new?Handler(socket));???
  • ???????????????????
  • catch?(Exception?e)?{???
  • ????????????????e.printStackTrace();???
  • ????????????}???
  • ????????}???
  • void?main(String[]?args)?throws?IOException?{???
  • new?MultiThreadServer().service();???
  • }???
  • ????
  • ?

    import?java.io.BufferedReader;???
  • import?java.io.InputStream;???
  • import?java.io.InputStreamReader;???
  • import?java.io.OutputStream;???
  • import?java.io.PrintWriter;???
  • class?Handler?implements?Runnable{???
  • private?Socket?socket;???
  • public?Handler(Socket?socket){???
  • this.socket=socket;???
  • private?PrintWriter?getWriter(Socket?socket)? ????????OutputStream?socketOut=socket.getOutputStream();???
  • return?new?PrintWriter(socketOut,true);???
  • private?BufferedReader?getReader(Socket?socket)? ????????InputStream?socketIn=socket.getInputStream();???
  • new?InputStreamReader(socketIn));???
  • public?String?echo(String?msg){???
  • return?"echo:"+msg;???
  • void?run(){???
  • ????????????System.out.println("New?connection?accepted?"+socket.getInetAddress()+":"+socket.getPort());???
  • ????????????BufferedReader?br=getReader(socket);???
  • ????????????PrintWriter?pw=getWriter(socket);???
  • ????????????String?msg=while((msg=br.readLine())!=null){???
  • ????????????????System.out.println(msg);???
  • ????????????????pw.println(echo(msg));???
  • if(msg.equals("bye"))???
  • ????????}?catch?(IOException?e)?{???
  • ????????????e.printStackTrace();???
  • ????????}finally{???
  • if(socket!=null)???
  • ????????????????????socket.close();???
  • ?服务器二建立了线程数量,并且可以不断进行端口连接。

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

  • (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读