as3 的socket 杂谈

as3 中提供2种socket,xmlsocket和socket,xmlsocket的底层是socket实现;

1。tcp服务器协议,作为一种流协议,他不停的将分片传输给客户端,P作为流,发包是不会整包到达的,而是源源不断的

到UDP服务器协议,作为数据包协议,整包到达;具体参见:http://blog.csdn.net/hili2006

2。as3 中的socket的data事件是buffer有新到的数据就触发,有时候会有2个数据发过来,而只触发了一个data事件,所以as3中的socket是需要解码的,解码参见:http://blog.csdn.net/hili2006/archive/2010/04/20/5508715.aspx

测试代码如下:php tcp server&as3 socket

php:

$msg1 = "Welcome To ICA Server: 1 ";

$msg2 = "Welcome To ICA Server: 2 ";

$msg3 = "Welcome To ICA Server: 3 ";

@socket_write($msgsock, $msg1, strlen($msg1));

sleep(5);

@socket_write($msgsock, $msg2, strlen($msg2));

as3:

var counter2=0;

function data_handler(e:Event){ //如果php有sleep,那会接到2个data事件,并且byteavailable,如果

counter2++;                //没有sleep,则触发一个data事件,数据一起呈现到byeteavailable中

trace (counter2+"\n");

trace (e.target.bytesAvailable+"\n");

}

3。as3 的socket和xmlsocket类似,接到的数据中含有结尾符“\0”,在read数据的时候会当成结尾,结束读取返回,即使read中设定了length长度参数,并且当成读取了所有buffer数据处理,即bytesAvailable==0;

测试代码如下:

 

php:

$msg1 = "Welcome To ICA Server: 1 ";

$msg2 = "Welcome To ICA Server: 2 /0";

$msg3 = "Welcome To ICA Server: 3 ";

@socket_write($msgsock, $msg1, strlen($msg1));

@socket_write($msgsock, $msg2, strlen($msg2));

@socket_write($msgsock, $msg3, strlen($msg3));

as3:

function data_handler(e:Event){

trace (e.target.bytesAvailable+"\n");   //=152

trace ("receiving data: "+e.target.readUTFBytes(e.target.bytesAvailable));// 只有输出Welcome To ICA Server: 1

trace (e.target.bytesAvailable+"\n");//=0

}

4。如果as3 的data事件函数正在执行的时候,比如在此函数中用while循环解码,此时有新的数据发送过来,data事件还会触发么?触发的话,正在执行的怎么办?原有数据还有么?

 


posted @ 2010-10-26 15:01  rob_2010  阅读(461)  评论(0编辑  收藏  举报