3 回答

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
首先可以將RECV函數(shù)設(shè)置為非阻塞模式。這個(gè)就不多說了。
對于另一個(gè)問題,發(fā)送端每次發(fā)送的字節(jié)數(shù)要和接收端每次接收的內(nèi)容大小一致。比如接收端每次收4K,發(fā)送端也必須是每次發(fā)4K,如果發(fā)送的內(nèi)容實(shí)際小于4K,就用空字符補(bǔ)。

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
你可以用異步的IO模式,比如select模式,overlappped模式,事件模式,甚至IOCP。這樣就不會存在recv被卡住的問題了,性能也極大的提高。
同步的recv返回0,表示連接正常關(guān)閉, 你想讓recv返回0卻保持連接這是很難的。

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
用select測試.
select功能很強(qiáng), 但用起來有點(diǎn)復(fù)雜, 很多人說它不好用, 其實(shí)是不會用, 希望你別說它不好用.
======================================================
不論是不是Blocking模式, select都可以用來檢測:
1)連接是否成功;
2)是不是可以發(fā)送;
3)是不是可以接收;
4)對方是否斷開連接
=====================================================
"send那邊把其他文件的字節(jié)也傳到recv端第一個(gè)文件里"
你的程序設(shè)計(jì)的問題, 和socket怎么用無關(guān).
- 3 回答
- 0 關(guān)注
- 493 瀏覽
添加回答
舉報(bào)