Java跟AS用socket通信
最近在做一个聊天室,后台用Java(其他的我也不懂),其实可以用XMLSocket来做的,也很方便,但我用了Socket,更灵活些。
为了不见乱码,并且方便些,我选择了UTF-8作为字符串编码。
Ok,说下碰到的几个问题。
AS这边不时的报Error: Error #2030: 遇到文件尾。
原因:没有足够的字节可读(就是字节太少了)。
但是我已经做了缓存,所有Java传来的数据都接收完了。
客户端:readUTF.
服务端:UTF-8.
然后把Java 传来的数据一个字节一个字节的分析,
发现 readUTF 需要现读一个16位(2个字节)的头标示字符流的长度,
而Java直接写字节流,没有写长度.
换用readUTFBytes搞定。
XMLSocket有个好处就是你不需要自己从接受的数据中分离每个包,XMLSocket用 \0
表示一个包的结束。
Socket 的好处是它很灵活,你可以传任何数据, 但是需要自己从数据中分离每个包.O(∩_∩)O~
OK, 最简单的办法:像XMLSocket一样用 \0
表示一个包的结束。
// 缓存区 var byteBuffer:ByteArray = new ByteArray(); // 有数据来了. private function socketDataHandler(e:ProgressEvent):void { var len:uint = socket.bytesAvailable; while (--len >= 0) { var b:int = socket.readByte(); // 一个包的结尾 if (0 == b) { // 处理单个包的数据 handleMessage(byteBuffer); byteBuffer = new ByteArray(); } // 将数据放到缓存区里 else { byteBuffer.writeByte(b); } } }
» 转载请注明来源:www.litefeel.com » 《Java跟AS用socket通信》
» 本文链接地址:https://www.litefeel.com/java-communication-as-by-socket/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
» 本文链接地址:https://www.litefeel.com/java-communication-as-by-socket/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
@mili
哦,服务器端没写, :roll:
:???: :o 要服务器的不弄