mina 接收数据问题
不知道为什么,mina运行1段时间就会在接收数据出现问题!特别是客户端连发数据时!
正常时:
客户端发出:78 DA E3 E2 66 64 4E 64 61 64 04 00 02 4D 00 81
服务端接收: 78 DA E3 E2 66 64 4E 64 61 64 04 00 02 4D 00 81
异常时:
客户端发出:78 DA E3 E2 66 64 4E 64 61 64 04 00 02 4D 00 81
服务端接收: 78 DA E3 E2 66 64 4E 64 61 64 04 00 02 4D 00 81 78 DA E3 E2 66 64 4E 64
客户端发出:78 DA E3 E2 66 64 4E 64 61 64 04 00 02 4D 00 81
服务端接收: 4E 64 61 64 04 00 02 4D 00 81 <----这时就出错了!
应该是在decode时,缓冲中的数据里,有两个或以上有客户端写发出的数据,所以一读缓冲中的数据,就读多了,导致下次再读时数据不完整。
在网上找了很久,都找不到解决方法!
http://www.ibm.com/developerworks/cn/java/j-lo-mina2
这里提到 prefixedDataAvailable 会检查 消息头,但是我不知道怎样设置消息头。
有人对mina有研究吗?能帮帮我吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
对于网络中粘包的问题,你只能自己去拆包组包,你必须在数据包中定义包的长度,根据这个长度去读取数据。
可以继承MessageDecoder实现数据验证
给你一个通用的消息结构。
消息类型| 主消息长度 [| 其它定长数据] | 主消息内容(长度由上上一个结构指定)
2 byte | 4 byte [| 其它定长数据] | n byte
写 Message Encoder Decoder 解析验证数据。
可以使用Mina给出的例子 sumup 中的解码/编码器。
可以参考下http://blog.csdn.net/sinboy/archive/2009/03/13/3988642.aspx 张新波兄弟的博客
引用来自“jack.wgm”的帖子
拆包组包。。。
楼主,我也遇到这样的问题,请问你解决了吗?
拆包组包。。。
我在Flash 设置信息头,信息头里记的是信息的长度,然後在mina里先读信息头里记的长度
这方法行,不过有5个以上客户端和每个客户端以200毫秒向服务器发送信息,服务端又开始异常。
我只新手,帮我看看有没有写错,下面附源码!
Flash 发信息
Java AMF3Decoder
就是在协议的开头设一个长度,说明这个包有多小数据