服务器for循环发buffer,接收端socket为什么只收到两次,一次正常,第二次是所有其它数据(200分)

  • 主题发起人 主题发起人 weihang
  • 开始时间 开始时间
W

weihang

Unregistered / Unconfirmed
GUEST, unregistred user!
服务器程序别人的,所以不可能改动。
客户端如题,用ReceiveLength就能看出来,第一次12,第二次156,
我该怎么接收呢?
(发送的buffer长度不定的,不能固定,俄且只能在接受上打主意)。
 
TCP层上你是无法保证一次收到的数据包“正好”是发送出来的一个包。尤其是在包比较
小的时候,TCP层由于效率原因往往会把小包拼接起来一起发送。

处理的话可能就只能够分析透服务端的协议,看看能够从一个stream中截取相应一次发送的
长度,然后再处理。
 
可似乎VC++写的客户端就没有这个问题
 
to weihang
vc++的程序也有类似的问题,第一次8个字节,第二次全部,我曾经为找这个问题伤透
了脑筋
 
因为在TCP层上的数据是stream的概念,必需自己人为地在传输的数据中插入一些
分割字符,以区别不同次传送的数据。就好象打开一个文本文件,总是以会车换行
为分割符来将文件分割成一行行显示一样。如果你是直接在IP层处理数据的话,是
没有这个问题的,可不幸的是socket是TCP层上的东西。

所以你只能在数据流中找规律了。
 
意思就是说是发送的问题而不是接收的问题了?
 
可以这样说,你可以自己写一个类似的服务端程序,将每次发送的后面加上特殊字符,
然后再在客户端进行分割,具体的源代码如果你想要我可以给你一个,是我自己写的
可能不太好,毕竟不是学计算机出身的,但是可能有用,交个朋友吗!
 
to qiaohj
我也写过你说的方法,但问题就在于这个是别人写的服务器,我又没它的
源代码。
 
weihang:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
 
多人接受答案了。
 
后退
顶部