as3 的socket 杂谈

来源:互联网 发布:资源搜索程序源码 编辑:程序博客网 时间:2024/06/05 09:57

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事件还会触发么?触发的话,正在执行的怎么办?原有数据还有么?

 

原创粉丝点击