java as_» 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);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值