flex flash socket通信实例
2012-01-31 14:59
471 查看
Socket 套接字连接允许Flash播放器通过指定的端口与服务器通信,socket连接与其他通信技术
最大的不同是socket连接在数据传输完成后不会自动关闭。
当socket连接创建后,连接会一直保持,直到客户端(Flash播放器)和服务端主动关闭,因此
服务器可在任何时间不用客户端请求即可发送数据给客户端。
Socket连接被普遍用于创建多用户应用程序,比如说一个在线聊天室,它有一个服务端程序和
无数个Flash客户端组成。每次客户端发送消息给服务器,服务器检测那些用户可以收到这些消
息并把消息传给指定客户端,这种情况下接收客户端并没有提前请求数据而是通过服务器主动
推送数据的。当客户端关闭时,服务端提示其他客户端某客户端已离线。
Flash播放器提供了两种类型的socket连接。一种是早期版本就有的XMLSocket,Flash播放器9增
加了二进制socket连接。
使用flash.net.XMLSocket类创建XML数据格式的socket连接,使用flash.net.Socket类创建二进制数
据格式socket连接。
XML socket连接以XML数据报交换数据,二进制socket连接是ActionScript 3.0新增的功能,相比
之下更低级,但功能很强大,几乎可以连接任意类型的socket服务端程序。例如二进制sockets 可
连接邮件服务端程序(POP3, SMTP, 和IMAP), 新闻服务器(NNTP), 聊天室服务器或远程桌面
VNC服务器( RFB)。
不管是哪种类型的socket 连接,其通信方式都是异步的,也就是说你不能直接从socket 连接中
读取数据,而是通过事件处理函数进行读取处理。
以上问第三方翻译
下面贴出我写的一段代码没有什么实在意思仅为学习之用,写得不好不请各位多指教
<?xml version= "1.0" encoding= "utf-8" ?> <mx:Application xmlns:mx= "http://www.adobe.com/2006/mxml" layout= "vertical" verticalAlign= "middle" fontSize= "12" creationComplete= "onInit()" > <mx:ViewStack id= "viewstack1" width= "454" height= "338" selectedIndex= "0" > <mx:Canvas label = "View 1" width= "100%" height= "100%" > <mx:TitleWindow width= "100%" height= "100%" layout= "absolute" title= "连接设置" > <mx:Button x= "181" y= "186" label = "连 接" click= "onConnect()" id= "btnCon" /> <mx:TextInput x= "181" y= "31" id= "txtHost" text= "127.0.0.1" width= "184" /> <mx:TextInput x= "181" y= "94" id= "txtPort" width= "184" text= "6000" /> <mx:Label x= "74" y= "31" text= "链接地址:" /> <mx:Label x= "74" y= "94" text= "连接端口:" /> <mx:Button x= "297" y= "186" label = "清 空" click= "onEmpty()" /> </mx:TitleWindow> </mx:Canvas> <mx:Canvas label = "View 1" width= "100%" height= "100%" > <mx:TitleWindow width= "100%" height= "100%" layout= "absolute" title= "消息窗口" > <mx:TextArea x= "10" y= "10" width= "414" height= "176" id= "txtRec" /> <mx:Button x= "160" y= "262" label = "发 送" fontSize= "12" click= "onSendData()" /> <mx:Button x= "260" y= "262" label = "断 开" fontSize= "12" click= "onClose()" /> <mx:TextInput x= "10" y= "194" width= "414" id= "txtSend" height= "45" /> <mx:Text x= "201" y= "202" text= "正在断开,请稍后..." visible= "false" id= "msg" /> <mx:Button x= "355" y= "262" label = "关 闭" click= "onCloseWindow()" /> </mx:TitleWindow> </mx:Canvas> </mx:ViewStack> <mx:Script> <![CDATA[ import mx.controls.Alert; import flash.net.Socket; import flash.utils.ByteArray; import flash.events.SecurityErrorEvent; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; //全局变量 private var socket:Socket= new Socket(); //连接 private function onInit(): void { socket.addEventListener(Event.CONNECT,connect); socket.addEventListener(Event.CLOSE,onClosed); socket.addEventListener(IOErrorEvent.IO_ERROR,onIoError); socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSeurity); socket.addEventListener(ProgressEvent.SOCKET_DATA,onReceiveData); } private function connect(e:Event): void { this .viewstack1.selectedIndex= 1 ; } private function onClosed(e:Event): void { } //连接服务器 private function onConnect(): void { var host: String = this .txtHost.text; var port: Number = Number ( this .txtPort.text); if (!(host&&port)) { Alert.show( "服务器地址和端口不能为空!" , "提示" ); return ; } socket.connect(host,port); } //关闭服务器 private function onClose(): void { socket.close(); this .viewstack1.selectedIndex= 0 ; } //IO错误 private function onIoError(evt:IOErrorEvent): void { Alert.show(evt.text, "IO错误!" ); } //安全策略错误 private function onSeurity(evt:SecurityErrorEvent): void { Alert.show(evt.text, "安全策略错误" ); } //发送 private function onSendData(): void { var buff:ByteArray= new ByteArray(); buff.writeUTF( this .txtSend.text); socket.writeBytes(buff, 0 ,buff.length); socket.flush(); //发送数据 } //接收 private function onReceiveData(evt:ProgressEvent): void { while (socket.bytesAvailable) { this .txtRec.text+=socket.readMultiByte(socket.bytesAvailable, "utf8" )+ "\n" ; } } /**ui操作**/ //清空 private function onEmpty(): void { this .txtHost.text= "" ; this .txtPort.text= "" ; this .txtHost.setFocus(); } //关闭浏览器 private function onCloseWindow(): void { var request:URLRequest = new URLRequest( "javascript:window.close()" ); navigateToURL(request, "_self" ); } ]]> </mx:Script> </mx:Application> |
转自 : http://www.cnblogs.com/wangleicode/archive/2010/12/22/1914054.html
相关文章推荐
- Flex通信-与Java实现Socket通信实例
- 实现QT与Flex、Flash的通信(基于Socket)
- flash/flex socket通讯实例
- flash/flex 与服务器socket通信
- Flex Socket与Java通信实例说明(转)
- flex与socket通信之成功----之成功补充篇(关于C#建立FLASH服务端的安全沙箱问题)
- 利用Socket实现C++与Flex通信
- 利用flash与.net下socket通信实现WEB页面的“推”
- 某科学的超 Java网络编程:Socket通信原理及实例学习
- 网络协议栈学习(一)socket通信实例
- unix环境IPC通信之socket(三),tcp采用并发服务器编程实例,多进程方式 4000
- 利用flash与.net下socket通信实现WEB页面的“推”(二)(转)
- php 实例说明 socket通信机制
- php socket通信机制实例说明与代码
- Flash 与 PHP 简单通信实例。
- 安卓开发中socket通信开发实例
- Flash Socket通信的安全策略问题 843端口
- Flex通信-与Java实现Socket通信实例
- Socket通信实例一
- 利用C#进行Socket通信编程之二:一个实例