当前位置: 代码迷 >> Iphone >> 求大侠 AsyncSocket 类数据接收有关问题
  详细解决方案

求大侠 AsyncSocket 类数据接收有关问题

热度:14   发布时间:2016-04-25 06:12:43.0
求大侠 AsyncSocket 类数据接收问题
服务器给我发送返回数据,大小大概在20kb(小b,位),我接收的长度却只有2872b,多的时候可以达到7180了,最少的时候是1436,(这些数字都是1436的倍数). 读取时间,我都设置为-1,也就是最大值... 返回的长度最常见就是2872了...
请问各路大侠,有没有遇到此种情况,或者您觉得可能的原因在哪?
------最佳解决方案--------------------
发的包的长度可能固定,但收到的包长度会时大时小。
这个长度不是自已控制的,这是tcp传输时底层做的工作。发送的数据存到缓冲中,当网络整度慢的时候,两个包会粘接在一起一起发送。这在tcp传输数据时常见到的现像。。
------其他解决方案--------------------
比如原来的数据是AAAAAA,现在分成两个包了,两个包里面的数据加一起,长度超过了原包的长度。

胡说八道。如果服务器发了AAAAAA,接着发BBBBBB,你收到的可能是AAAAAA,再收到BBBBBB,或者一次性收到AAAAAABBBBBBB。没有其他情况。别什么抓包分析什么XX。学点基础比较好
------其他解决方案--------------------
我估计你的服务器按1436大小分包了的。
------其他解决方案--------------------
如用载包工具看到的数据多是因为那是一部分tcp封包的协议头tcp自动加的包头!
------其他解决方案--------------------
引用:
我估计你的服务器按1436大小分包了的。


也不是,服务器是一次性把数据全部返回的..
------其他解决方案--------------------
服务器是一次性发送数据的,但是客户端却分批接收...而且每次接收的长度并不一致...这个..
------其他解决方案--------------------
引用:
发的包的长度可能固定,但收到的包长度会时大时小。
这个长度不是自已控制的,这是tcp传输时底层做的工作。发送的数据存到缓冲中,当网络整度慢的时候,两个包会粘接在一起一起发送。这在tcp传输数据时常见到的现像。。

嗯,我找了很久,才发现,真的是这样的。比如原来的数据是AAAAAA,现在分成两个包了,两个包里面的数据加一起,长度超过了原包的长度,多出来的长度是什么?不会是相应的格式吧,比如目标IP,端口之类的吧? 还是包序列?
------其他解决方案--------------------
引用:
如用载包工具看到的数据多是因为那是一部分tcp封包的协议头tcp自动加的包头!


请问,这部分包头,我应该如何解析?
------其他解决方案--------------------
引用:
比如原来的数据是AAAAAA,现在分成两个包了,两个包里面的数据加一起,长度超过了原包的长度。

胡说八道。如果服务器发了AAAAAA,接着发BBBBBB,你收到的可能是AAAAAA,再收到BBBBBB,或者一次性收到AAAAAABBBBBBB。没有其他情况。别什么抓包分析什么XX。学点基础比较好

服务器只发送了一次AAAAAABBBBBBB,而我这边是多次接收,而且总长度比服务器发送的长度还多出几个字节,我不知道多出的这几个字节是怎么回事.....
------其他解决方案--------------------
嗯,问题已经解决了一大半,楼上说的对,不会有多余的数据,组装起来就好了,只是粘包现象很恐怖...这个需要好好处理....
------其他解决方案--------------------
该回复于2012-08-03 09:13:56被版主删除
------其他解决方案--------------------
该回复于2012-08-03 09:13:55被版主删除