在用stream方式流式socket编程,我在客户端连续调用几次send(),而在服务器端只调用了一次recv(),但是它接收了这几次send()发来的全部数据,而我希望一个recv()只接收一个send()发来的数据,我该怎么办?谢谢!

解决方案 »

  1.   

    控制接收的字节数,比如设置成你发一次的字节数
    e.g.:
    send(s,buf,10,0)对应的recv(s,buf,10,0)
    两头都设置成10,就可以了。然后多调用几次recv,就有可能一次收到一个send了
    要确保每次收到的大小都为发送的大小,我建议使用UDP方式,比较好控制。
      

  2.   

    应该是对应的吧,有一个send就有一个recv。改成用write和read试试看呢?
      

  3.   

    可是如果按gxxlc(冰良)的指点,会丢数据。
    请问,write和read是什么意思?
      

  4.   

    send以后延时啊!或者send以后收到确认再send
      

  5.   

    最好的办法是,在recv端在另行准备一个缓冲区,将每次接受到的数据存入该缓冲区,然后由另外一个线程P,从这个缓冲区中取出,这样作有一个前提就是,发送的数据报文的前几个字节由于本次发送报文的长度,那么P线程便可先按照约定,将msgLen读出,再根据msgLen中提供的长度,将数据从缓冲区中读出,而缓冲区中的后面的数据向前移动即可。