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

精慕HU
TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
不可能知道服務(wù)器是否已經(jīng)發(fā)送完畢,因?yàn)槟惆l(fā)送的沒(méi)有數(shù)據(jù)協(xié)議的格式,你可以讓發(fā)送方與接收方定個(gè)協(xié)議。其實(shí)你可以在recv時(shí)加個(gè)參數(shù),讓它只是看看有沒(méi)有數(shù)據(jù)到達(dá),recv最后那個(gè)參數(shù)設(shè)為MSG_OOB就可以,當(dāng)發(fā)現(xiàn)有數(shù)據(jù)到時(shí),你先Sleep一下,至于多長(zhǎng)時(shí)間就要看實(shí)際情況,一般幾十個(gè)毫秒就絕對(duì)夠了,然后,你再recv一下,這次最后那個(gè)參數(shù)為MSG_WAITALL就可以,這樣就一次性接收完畢
- 1 回答
- 0 關(guān)注
- 373 瀏覽
添加回答
舉報(bào)
0/150
提交
取消