Socket通讯问题
小弟在做一个基于Socket进行通讯的一个东东,现在遇到一个奇怪的问题
因为这个模块现在有和需要传输文件的功能
所以这块是基于TCP来做的
但是为了方便控制,我传输的每个字节流都是进行了二次封装的,简单的说就是把固定大小的byte数组的数据放到对象里,然后序列化对象再传输。按照理论模式它应该是没什么问题的,但是现在出现了一个奇怪的东东
就是在接受文件的时候,突然间就会出现一个超大的字节流,而且还不是定时的出,遭成了反序列化失败
大家谁能给点建议,小弟在这里谢谢了
[最优解释]
估计是你收到了不符合你要求数据的数据,比如你数据大小为100字节,而你收到120字节,这样你反序列化必然出错,所以你就要指定一个协议,来规范判断接受的数据是否符合你的要求
[其他解释]
最主要还是你的协议没定好,你直接传包问题就大了。因为你启动接收时,TCP已经有好几个包可能已经在里面了,你取出来的数据是按你定义的长度,所以问题解决不了。
讲眯我的最简单方法:(有眯卖弄)
【长度】【数据】【检验】 注:长久包括数据+校验=长度
第一次:读长度(这是可以规定的)
第二次:读数据和校验
然后反把校验去掉,剩下数据,然后反系列化就OK了
[其他解释]
这个是包大于你的缓冲区的原因造成的。
一般来说tcp除了设置一个较大的缓冲区以为,还要对大于缓冲区的数据缓存拼接处理。
还要处理粘包的问题。就是一次接受了多个数据的包。
所以你得定义包的格式。包头。包长。包尾等。
[其他解释]