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 地址或域名和端口号作为方法参数:
+展开
-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));
}

在上面的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.xml 文件后,Socket 就可以和正确的端口连接了。

加支付宝好友偷能量挖...


评论(0)网络
阅读(255)喜欢(0)flash/flex/fcs/AIR