pythontcp文件传输_python socket实现文件传输(防粘包)
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)行整合(直到裝滿(mǎn)數(shù)據(jù)緩沖區(qū)),這樣就造成了粘包數(shù)據(jù);
B.接收方接收方的粘包是由于接收用戶(hù)相關(guān)進(jìn)程不及時(shí)接收數(shù)據(jù),從而導(dǎo)致粘包問(wèn)題,這是因?yàn)榻邮辗较劝呀邮盏降臄?shù)據(jù)放在系統(tǒng)接受緩沖區(qū),用戶(hù)進(jìn)程從該緩沖區(qū)取定量的數(shù)據(jù),但若下一包數(shù)據(jù)到達(dá)前,緩沖區(qū)的數(shù)據(jù)沒(méi)有及時(shí)的被用戶(hù)進(jìn)程取走,則下一包數(shù)據(jù)與前一包部分?jǐn)?shù)據(jù)在系統(tǒng)緩沖區(qū),就可能導(dǎo)致用戶(hù)設(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
總結(jié)
以上是生活随笔為你收集整理的pythontcp文件传输_python socket实现文件传输(防粘包)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python生成相似句子_4种方法计算句
- 下一篇: python中hist函数参数_用his