關(guān)于粘包,查了一些資料,還是不太清楚。我的理解是,A與B的連接建立后,socket將tcp字節(jié)流中的非數(shù)據(jù)字段進(jìn)行拆解,并將數(shù)據(jù)部分放入該連接的輸入緩沖區(qū)。當(dāng)有多個(gè)A->B的包發(fā)來(lái)、且B沒(méi)有對(duì)每一條數(shù)據(jù)及時(shí)進(jìn)行處理時(shí),多條信息就會(huì)同時(shí)存在于輸入緩沖區(qū)中,首尾相連。如果數(shù)據(jù)部分沒(méi)有分隔符或能夠標(biāo)識(shí)數(shù)據(jù)長(zhǎng)度的字段,則很有可能出現(xiàn)無(wú)法分割出單條數(shù)據(jù)邊界的情況,從而導(dǎo)致「粘包」。如果確實(shí)會(huì)出現(xiàn)「粘包」現(xiàn)象,則解決方法是不是應(yīng)該是:確保接收方會(huì)及時(shí)處理發(fā)送來(lái)的數(shù)據(jù),使輸入緩沖區(qū)中同時(shí)只會(huì)存在一條發(fā)送來(lái)的數(shù)據(jù);保證發(fā)送端的數(shù)據(jù)中有分隔符或能夠標(biāo)識(shí)其長(zhǎng)度的字段(如HTTP消息)。不知道以上的理解是不是有誤?
socket 編程中的粘包問(wèn)題
慕虎7371278
2019-05-23 18:05:47