MINA2搭建的SOCKET服务器收到数据抛出异常:MalformedInputException

Mina SOCKET服务器异常解析
本文分析了使用MINA 2.0.9搭建的SOCKET服务器线上出现的ProtocolDecoderException异常,探讨了该问题的根本原因在于服务器解码时未完整获取到中文字符的字节,从而提出了解决方案——服务器粘包。

使用MINA2.0.9搭建的SOCKET服务器,最近在线上一直抛异常:

org.apache.mina.filter.codec.ProtocolDecoderException: java.nio.charset.MalformedInputException: Input length = 1 (Hexdump: FF FF F5 41 4C 49 56 45 0D 0A 7B 22 72 65 71 75 65 73 74 43 6D 64 54 79 70 65 22 3A 31 33 2C 22 73 65 71 22 3A 33 31 2C 22 74 6F 74 61 6C 43 6F 75 6E 74 22 3A 34 2C 22 6F 70 65 72 53 74 65 70)

开始我通过改变服务器编码,使用SocketTool测试,在传递中文给服务器的时候,可以模拟出这个问题,以为是编码问题导致的,后来各种找解决方案,完全没有头绪。

在网上各种搜之后,我发现其实走偏了...

根本原因是服务器解码的时候的问题(http://blog.youkuaiyun.com/hepeng19861212/article/details/4457023):

中文字符一般占3个或者4个字节,当我们没有把某个字符的字节全部取来就去解码,肯定会出问题的,所以最根本的解决方案是服务器粘包,将所有的字节全部取来后再去解码。

具体实现我还没有去看,也还在深入学习中。

转载于:https://my.oschina.net/simpleton/blog/405146

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值