服務端三次用send()函數發送數據,客戶端用一次recv()函數接收這三次的數據,怎么才能都接收到。例如:(不寫參數了)send(xxxxxxxxxxxxxxxxxxxxx);send(yyyyyyyyyyyyyyyyyyyyyyyyyyyy);send(zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz);用一次recv()接收,然后sprinf()出現xxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz我用recv()函數接收后只能打印出xxxxxxxxxxxxxxxxxxxxx而下一次在接收別的數據時候再打印就會出現yyyyyyyyyyyyyyyyyyyyyyyyyyyy總是慢了一次~!用nc就可以一次全接收到~!請問怎么寫代碼可以一次就接收到并打印出來~!用循環也可以~!怎么才能知道服務端已經發送完成,然后一次打印出來~!
1 回答

精慕HU
TA貢獻1845條經驗 獲得超8個贊
不可能知道服務器是否已經發送完畢,因為你發送的沒有數據協議的格式,你可以讓發送方與接收方定個協議。其實你可以在recv時加個參數,讓它只是看看有沒有數據到達,recv最后那個參數設為MSG_OOB就可以,當發現有數據到時,你先Sleep一下,至于多長時間就要看實際情況,一般幾十個毫秒就絕對夠了,然后,你再recv一下,這次最后那個參數為MSG_WAITALL就可以,這樣就一次性接收完畢
- 1 回答
- 0 關注
- 367 瀏覽
添加回答
舉報
0/150
提交
取消