recv()函数怎么一次接收send()三次发送的数据(c语言实现)。

服务端三次用send()函数发送数据,客户端用一次recv()函数接收这三次的数据,怎么才能都接收到。
例如:(不写参数了)
send(xxxxxxxxxxxxxxxxxxxxx);
send(yyyyyyyyyyyyyyyyyyyyyyyyyyyy);
send(zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz);
用一次recv()接收,然后sprinf()出现
xxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyyyy
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

我用recv()函数接收后只能打印出xxxxxxxxxxxxxxxxxxxxx
而下一次在接收别的数据时候再打印就会出现yyyyyyyyyyyyyyyyyyyyyyyyyyyy
总是慢了一次~!
用nc就可以一次全接收到~!
请问怎么写代码可以一次就接收到并打印出来~!
用循环也可以~!怎么才能知道服务端已经发送完成,然后一次打印出来~!

不可能知道服务器是否已经发送完毕,因为你发送的没有数据协议的格式,你可以让发送方与接收方定个协议。其实你可以在recv时加个参数,让它只是看看有没有数据到达,recv最后那个参数设为MSG_OOB就可以,当发现有数据到时,你先Sleep一下,至于多长时间就要看实际情况,一般几十个毫秒就绝对够了,然后,你再recv一下,这次最后那个参数为MSG_WAITALL就可以,这样就一次性接收完毕
温馨提示:答案为网友推荐,仅供参考
相似回答