=波波日志 > flash/flex/fcs/AIR > 18.13.通过二进制Socket发送和接收二进制数据=
[转]18.13.通过二进制Socket发送和接收二进制数据
18.13.1. 问题
我想接收二进制数据,处理完后以同样的二进制格式发送数据。
18.13.2. 解决办法
使用flash.net.Socket 打开socket 连接。
18.13.3. 讨论
flash.net.Socket 是Flex 框架或ActionScript 3中最低级别的通信工具,使得你能建立socket连接并读取和写入原始的二进制数据。Socket 可接收和发送POP3,SMTP,IMAP 信息,甚至是自定义二进制格式。Flash Player 可以使用这样的二进制协议直接与服务器通信。
要创建一个Socket,先要使用构造器创建Socket 实例,调用connect 方法,传递IP 地址或域名和端口号作为方法参数:
在上面的sendSocketData 方法中,writeMultiByte 方法通过Socket 连接发送数据。该方法接受一字符串值作为发送的二进制数据,第二个参数采用的数据编码。readSocketData 方法读取任何从Socket 发送来的数据,并把读取的数据字节存到ByteArray 对象。如要读取ByteArray 的数据,可使用各种版本的read 方法,包括integers, strings,和arrays 的read 方法。
把Object 作为二进制数据发送后,如果该类型已通过flash.net.RegisterClass 方法注册过,即可使用ByteArray 的readObject 方法读取。
要连接端口号低于1024的Socket,你需要在站点根目录有一个cross-domain.xml 文件,其中明且定义允许的端口号。例如要允许Flash Player 与Web 服务器的80端口通信,可这样写:
正确放置好cross-domain.xml 文件后,Socket 就可以和正确的端口连接了。
我想接收二进制数据,处理完后以同样的二进制格式发送数据。
18.13.2. 解决办法
使用flash.net.Socket 打开socket 连接。
18.13.3. 讨论
flash.net.Socket 是Flex 框架或ActionScript 3中最低级别的通信工具,使得你能建立socket连接并读取和写入原始的二进制数据。Socket 可接收和发送POP3,SMTP,IMAP 信息,甚至是自定义二进制格式。Flash Player 可以使用这样的二进制协议直接与服务器通信。
要创建一个Socket,先要使用构造器创建Socket 实例,调用connect 方法,传递IP 地址或域名和端口号作为方法参数:
+展开
-ActionScript
var socket:Socket;
//create the new socket and connect to 127.0.0.1 on port 8080
private function init():void {
socket = new Socket();
socket.addEventListener(ProgressEvent.SOCKET_DATA,
readSocketData);
socket.connect("127.0.0.1", 8080);
} // send data to the socket
private function sendSocketData(string:String):void {
// send the string data and specify the encoding for the string
// in this case iso-08859-1, standard western european encoding
socket.writeMultiByte(string, "iso-8859-1");
}
// when data is passed to socket, read it into a new ByteArray
private function readSocketData(progressEvent:ProgressEvent):void
{
trace(progressEvent.bytesLoaded);
var ba:ByteArray = new ByteArray();
trace(socket.readBytes(bs));
}
//create the new socket and connect to 127.0.0.1 on port 8080
private function init():void {
socket = new Socket();
socket.addEventListener(ProgressEvent.SOCKET_DATA,
readSocketData);
socket.connect("127.0.0.1", 8080);
} // send data to the socket
private function sendSocketData(string:String):void {
// send the string data and specify the encoding for the string
// in this case iso-08859-1, standard western european encoding
socket.writeMultiByte(string, "iso-8859-1");
}
// when data is passed to socket, read it into a new ByteArray
private function readSocketData(progressEvent:ProgressEvent):void
{
trace(progressEvent.bytesLoaded);
var ba:ByteArray = new ByteArray();
trace(socket.readBytes(bs));
}
在上面的sendSocketData 方法中,writeMultiByte 方法通过Socket 连接发送数据。该方法接受一字符串值作为发送的二进制数据,第二个参数采用的数据编码。readSocketData 方法读取任何从Socket 发送来的数据,并把读取的数据字节存到ByteArray 对象。如要读取ByteArray 的数据,可使用各种版本的read 方法,包括integers, strings,和arrays 的read 方法。
把Object 作为二进制数据发送后,如果该类型已通过flash.net.RegisterClass 方法注册过,即可使用ByteArray 的readObject 方法读取。
要连接端口号低于1024的Socket,你需要在站点根目录有一个cross-domain.xml 文件,其中明且定义允许的端口号。例如要允许Flash Player 与Web 服务器的80端口通信,可这样写:
+展开
-XML
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="80" />
</cross-domain-policy>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="80" />
</cross-domain-policy>
正确放置好cross-domain.xml 文件后,Socket 就可以和正确的端口连接了。
类别:flash/flex/fcs/AIR 作者:转载 日期:2010-04-20 【评论:0】
相关文章
暂时没有评论!
发表留言
热门博文
- As+lightbox+js实现实时加载图片进度
- 21.8.使用Cairngorm框架生成器生成应用程序骨架
- 6.8.启动DataGrid拖拽功能
- 13.1.为ArrayCollection添加,排序和获取数据
- 22.7.使用ModuleLoader载入模块
- JavaScript控制Flash(swf)文件播放的问题
最新博文
- JavaScript调用flash.external.ExternalInterface.addCallback注册的函数在不同浏览器下的分析
- JavaScript获取执行flash中flash.external.ExternalInterface.addCallback注册的函数
- Flash XMLSocket使用总结
- 给flash右键增加自定义菜单
- flash控件html及color属性冲突问题
- Flash加载XML文件CDTATA节点内容被编码
随机博文
广告商赞助

