一个超级奇怪的问题,ClientSocket接收数据的长度与发送方的总是不一致。请高手帮忙

nescafe8 2004-10-09 02:05:22
我用ClientSocket接受另一方在linux下的socket 写的发送的数据,可是我调用Socket->ReceiveLength();
显示接受的数据长度总是大于发送方实际发送的长度。
请问高手们,这是为什么啊。
请高手们帮我分析以下,可能存在什么情况。
...全文
350 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
deshun205 2004-10-20
  • 打赏
  • 举报
回复
我也遇到过这种情况。主要是阻塞的问题。如果发送的数据没有发出去,它就会重新发一次。
而实际这个数据的一部分又被发送出去了,所以就发了两次相同的数据。所以在发送的时候应该考虑到网络阻塞的情况。

xujunjie 2004-10-20
  • 打赏
  • 举报
回复
这是很常见的粘包现象,详细的讨论及解决办法可到大富翁论坛上看看:

http://www.delphibbs.com/delphibbs/dispq.asp?lid=2846666
qibo999 2004-10-19
  • 打赏
  • 举报
回复
关心
cchao 2004-10-10
  • 打赏
  • 举报
回复
写个缓冲吧
阻塞有时候也是会粘包的
cchao 2004-10-10
  • 打赏
  • 举报
回复
不仅会粘包
而且有时候发一次收到2次
第二次可能什么都没有
但是就是能触发onread
cchao 2004-10-10
  • 打赏
  • 举报
回复
不可能
非阻塞一定会粘包的
playmud 2004-10-10
  • 打赏
  • 举报
回复
和缓冲有很大的关系,具体的不知道你说的这个函数是如何实现的。
如果第一次发7个字节,缓冲为8个字节,如果模式设成缓冲满了才读取,那肯定长度不对了。
Lewolf 2004-10-10
  • 打赏
  • 举报
回复
每一个小时发送一个数据包并且每一个数据包的大小不要超过8K,是绝对可以保证数据不会粘连的,但是这样的效率就太低了,每一分钟发送一个数据包的话,在正常网络条件下,也是不会粘连的,但是在一个极端的条件下,就是网络的速度小于2400bps的时候,偶尔会粘连的。如果每秒发送一个数据包,可能在大多数互联网的条件都是不会发生太多粘连的,但是如果在100MS以内连续发送数据包的话,一般的互联网连接都是会粘连的,如果一US发送一个数据包,10M和100M的局域网同样也是会粘连的。

我通常解决的办法是在发送时打包,接收时解包,不管粘连不粘连解包都可以正确的处理。
nescafe8 2004-10-09
  • 打赏
  • 举报
回复
继续顶啊
nescafe8 2004-10-09
  • 打赏
  • 举报
回复
顶啊
nescafe8 2004-10-09
  • 打赏
  • 举报
回复
楼上,那怎么能保证在非阻塞模式下,他发一次我收一次呢?
Lewolf 2004-10-09
  • 打赏
  • 举报
回复
收和发不是一一对应的,主要是看网络的条件,而且使用阻塞模式和非阻塞模式也是可以相互通信的,收发事件决定于双方的网络条件以及网卡的繁忙程度还有Socket栈的大小及数据块的大小。
nescafe8 2004-10-09
  • 打赏
  • 举报
回复
那我这个长度不对到底是怎么回事呢?
pp616 2004-10-09
  • 打赏
  • 举报
回复
不见得。可能是发3次收到3次。可能是收到2次。或许只有一次。

数据包可能粘在一起。
nescafe8 2004-10-09
  • 打赏
  • 举报
回复
继续顶啊,小弟很急啊
nescafe8 2004-10-09
  • 打赏
  • 举报
回复
它发了8个字节,可是我收到了17个字节的数据。
我的17个字节中前8个是对的。

我还个问题,他一个发三次,是不是每发一次就会触发我的一次ClientSocketRead事件。
有没有可能我的 17个 字节是他三次一共发的字节数的总和呢?
Lewolf 2004-10-09
  • 打赏
  • 举报
回复
就是指的两个数据包连在一起了,所以长度变长了
playmud 2004-10-09
  • 打赏
  • 举报
回复
获得长度的方式不一样,长度可能不一样。
playmud 2004-10-09
  • 打赏
  • 举报
回复
内容对不对呢?
nescafe8 2004-10-09
  • 打赏
  • 举报
回复
楼上什么粘包啊?
加载更多回复(2)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧