假如一个客户端Client,一个服务端Server,如果Client调用了两次的Send()也就是发送了两份数据,之后
服务端接受数据Recv,它会把两次的数据都一次接受么?如果是这样我想一次一次的接受这怎么实现?在一端如果有数据发送来会发送通知消息,这个通知消息是何时发送的,是等到数据全都接受到接受
端的接受缓冲区时才发送,还是没把数据放在接受端的接受缓冲区的时发送?

解决方案 »

  1.   

    还有一个问题:就是发送数据时,Send()时先把数据拷贝到发送缓冲区中,它时何时把数据发送出去,是等到发送缓冲区都装满时才发送么?
      

  2.   

    你可以在服务器端按照字节取,好比你一次发20个字节,发了2次,你在服务器端先取20个字节,然后再取20个字节
    send()函数马上数据就发送出去了的,
      

  3.   

    每次发的字节数不是确定啊,可不可把发送的字节数写在发送数据的首部,接受时,现接受字节数,在接受后面的数据。
    如果send()函数只是把数据拷贝到发送缓冲区,并不是马上发送出去吧,如果时马上发送出去要缓冲区不就是没用了。
      

  4.   

    搜一下tcp粘包的问题,这问题简单解决可以利用帧头。
      

  5.   

    http://www.vckbase.com/document/viewdoc/?id=1203
      

  6.   

    需要协议
    每个包头都放一个长度
    每次先收长度,然后循环收这个长度
    这个是可控的,你如若想每次都有数据就发送的话,你可以用setsockopt设置发送缓冲为空
      

  7.   

    三 粘包出现原因:在流传输中出现,UDP不会出现粘包,因为它有消息边界(参考Windows 网络编程)
    1 发送端需要等缓冲区满才发送出去,造成粘包
    2 接收方不及时接收缓冲区的包,造成多个包接收以上这些话是我从网上看见的,有点不理解:
    1.UDP为什么不会出现粘包
    2.默认的缓冲区是8K,我发送一段文字“Hello World”,接收方就能收到了,说明缓冲区没慢也发送出去了啊,这怎么理解。
      

  8.   

    为什么把NAGGLE 禁止 就可以了呢?