flex socket 与java通信碰到的问题

   其实就是粘包问题了。

 

   老实讲,到现在还是没搞明白SOCKET_DATA被触发的底层原理,猜测是否与as的轮询机制有关,谁完全了解,还请不吝指教。

 

   目前遇到的情况有多个封包黏在一起触发,因此flex socket缓冲区中会存在多个封包的内容,此时在读取的时候就需要进行拆包。

 

   一般的做法都是在正式数据封包的前面多+4个字节,用来存放一个长度值,代表其后紧跟的数据包的字节长度。

 

   但我这次在Java端用的amf封装,正式的包头也被amf给封装了,取的数据不完整是解压不出来的,还苦恼了好久如何取的长度,其实一样的,在Java使用amf格式封装完数据包后,再在其前面+4个字节放置长度值,就可以了。

 

   当然,也有可能一个完整的数据包到达客户端后,SOCKET_DATA被触发了多次,这样每次socket缓冲区中的数据就是不完整的,直接解压不了的,这时应该自己设一个全局bytearray,作为一个缓存,如果长度不够,将字节流存放在这个bytearray中,与下次来的字节流进行续接,直到长度=需要的字节流长度时,再进行字节流的解压,这就是合包/并包了。

 

   最后还需要进行出错处理。

 

   还要再看看网络传输,网络层和应用层的机制。

你可能感兴趣的:(java,socket,Flex,网络应用)