信息Send后,按顺序存放在接收端的Received Buffer中,当你使用Receive时,socket会从Received Buffer中读出所指定大小的数据;当Send多条信息后,接收端使用Receive时,可能会读出多个信息的内容。有两个方法解决:
一、发送及接收的信息的长度固定。
二、定义数据包结构,如:包头+包体 ,即信息开头(包头)的几个字符说明包体的长度,包体紧跟包头。读信息时先读出包头,再根据包头中指定的长度读取包体。注:方法一 简单,不灵活。
    方法二 稍复杂,结构灵活,实用性大。

解决方案 »

  1.   

    这是因为TCP协议是基于流的,流自然就不分界了
      

  2.   

    Change 
     strlen(pMsg)
    To
     strlen(pMsg) + 1
      

  3.   

    to spbabyba:
        发到缓冲区的数据不及时读出并不会被覆盖!!TCP协议保证了数据的完整性.
    另外,TCP协议是基于流的传输协议, 不分各个信息数据包的边界. 如果你需要区分数据包边界, 可以选用UDP面向无连接的传输协议, 如果是在局域网的话.
      

  4.   

    我用了whoo(谁)的方法就行了,可是为什么呢?
    哪位大侠给解释一下,谢了。
      

  5.   

    whoo(谁):
        不好意思,我后来发现用你的方法不太稳定,时灵时不灵的,所以我还是采用了zhq2000(俗子)的方法二。