溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python socket粘包問(wèn)題怎么解決

發(fā)布時(shí)間:2022-03-19 15:37:05 來(lái)源:億速云 閱讀:283 作者:iii 欄目:web開發(fā)

今天小編給大家分享一下python socket粘包問(wèn)題怎么解決的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

1.文件傳輸?shù)囊c(diǎn):

采用iterator(迭代器對(duì)象)迭代讀取,提高讀取以及存取效率;

通過(guò)for line in file_handles逐行conn.send();

2.socket粘包問(wèn)題:

[出現(xiàn)原因]:

A.TCP協(xié)議為了提高傳輸效率,發(fā)送方往往需要收集定量的數(shù)據(jù)才會(huì)封裝給底層并發(fā)送,若出現(xiàn)連續(xù)send(data),TCP會(huì)把該數(shù)據(jù)進(jìn)行整合(直到裝滿數(shù)據(jù)緩沖區(qū)),這樣就造成了粘包數(shù)據(jù);

B.接收方接收方的粘包是由于接收用戶相關(guān)進(jìn)程不及時(shí)接收數(shù)據(jù),從而導(dǎo)致粘包問(wèn)題,這是因?yàn)榻邮辗较劝呀邮盏降臄?shù)據(jù)放在系統(tǒng)接受緩沖區(qū),用戶進(jìn)程從該緩沖區(qū)取定量的數(shù)據(jù),但若下一包數(shù)據(jù)到達(dá)前,緩沖區(qū)的數(shù)據(jù)沒(méi)有及時(shí)的被用戶進(jìn)程取走,則下一包數(shù)據(jù)與前一包部分?jǐn)?shù)據(jù)在系統(tǒng)緩沖區(qū),就可能導(dǎo)致用戶設(shè)定的進(jìn)程緩沖區(qū)從系統(tǒng)緩沖區(qū)取走兩個(gè)包的部分?jǐn)?shù)據(jù),從而導(dǎo)致粘包

[解決辦法]:

A 發(fā)送方在send()之前,先向接收方發(fā)送數(shù)據(jù)總量大小,并通過(guò)雙端確認(rèn),server端發(fā)送數(shù)據(jù)包,然后接收方通過(guò)按數(shù)據(jù)量大小循環(huán)設(shè)立緩沖區(qū)接收數(shù)據(jù);;

B: TCP提供了PUSH(強(qiáng)制數(shù)據(jù)立即傳送)操作,但影響性能;

C. 周全并且高效的處理粘包

3.code

server.py

client

以上就是“python socket粘包問(wèn)題怎么解決”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI