大家都知道:
  Winsock使用了一个算法(不知道是什么),使得用同一个Socket,在数据包很小的情况下,在很短时间内连续send(例如:两个紧挨着的send函数)多次,它会把多个数据包合并成一个数据包然后发出去,这样你可能发了2个数据包,但只收到了1个数据急。请问,如何才能保证发送的和收到的数据包数目不变,或怎样才能让它不合并数据包,100分相赠,谢谢。

解决方案 »

  1.   

    这不是Winsock算法,是TCP协议。目的是为了降低协议损耗,提高效率。
    你可以使用setsockopt(TCP_NODELAY)来强制发送(send函数直接拼包发送,不把多个包合并),但接收端如果稍慢的话,接收端仍然会将多个包合并之后返回给应用层的。所以,除了速度慢点之外,没有什么优点
      

  2.   

    如果是tcp的需要做一个tcp接收buffer.如果你的是等长包那容易,就是看这个buffer是否接收到足够的长度也就是你的包长.如果是包是变长的,那你需要定义包头4包尾,让后分析是否收到包尾,
      

  3.   

    使用setsockopt
    设置TCP_NODELAY禁止Nagle算法。
      

  4.   

    使用setsockopt
    设置TCP_NODELAY禁止Nagle算法。