2 回答

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
你的理解好像錯(cuò)了。
你要使用listen先建立服務(wù)端,然后使用connect讓客戶端連接到服務(wù)端。
服務(wù)端和客戶端連接建立后,你可以使用send / recv 進(jìn)行通信了。

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
TCP的連接建立需要進(jìn)行3次握手,你可以百度下:“TCP3次握手”看看對(duì)這個(gè)更詳細(xì)的說(shuō)明。
所以connect就是做這樣3個(gè)工作:
發(fā)出sync包(就是請(qǐng)求建立連接)
等待sync-ack包(就是服務(wù)器的響應(yīng),允許建立連接),對(duì)此要么是等到服務(wù)器的ack包,那么進(jìn)行第3步,要么是收到服務(wù)器地址不可達(dá)或者返回端口不可用的錯(cuò)誤或者是在規(guī)定時(shí)間內(nèi)沒(méi)有受到服務(wù)器的響應(yīng)那么就超時(shí),不論如何,后面的錯(cuò)誤會(huì)導(dǎo)致connect錯(cuò)誤返回
connect函數(shù)發(fā)出ack包,表明連接正式建立,然后函數(shù)正確返回
至于數(shù)據(jù)到底是客戶端先發(fā)出還是服務(wù)器端先發(fā)出,是由應(yīng)用決定的,也就是在connect之后發(fā)生的。所以跟connect沒(méi)有關(guān)系。connect之后你是想要recv還是send,隨便你。
添加回答
舉報(bào)