最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python數(shù)據(jù)傳輸黏包問(wèn)題

 更新時(shí)間:2022年04月11日 21:12:15   作者:長(zhǎng)得丑就要多讀書(shū)  
這篇文章主要介紹了Python數(shù)據(jù)傳輸黏包問(wèn)題,黏包指數(shù)據(jù)與數(shù)據(jù)之間沒(méi)有明確的分界線,導(dǎo)致不能正確的讀取數(shù)據(jù),更多相關(guān)內(nèi)容需要的小伙伴可以參考一下

1.socket黏包問(wèn)題原理

黏包:指數(shù)據(jù)與數(shù)據(jù)之間沒(méi)有明確的分界線,導(dǎo)致不能正確的讀取數(shù)據(jù)。

應(yīng)用數(shù)據(jù)想要發(fā)送數(shù)據(jù)就必須將數(shù)據(jù)交給操作系統(tǒng),而操作系統(tǒng)需要同時(shí)為所有的應(yīng)用程序提供數(shù)據(jù)傳輸服務(wù),就意味著不可能馬上將應(yīng)用數(shù)據(jù)發(fā)送,就需要為程序提供一個(gè)緩沖區(qū),用于臨時(shí)存放數(shù)據(jù)。

當(dāng)發(fā)送數(shù)據(jù)很快,有兩條數(shù)據(jù)都在緩沖區(qū)時(shí),操作系統(tǒng)可能將兩個(gè)數(shù)據(jù)發(fā)給接收方,數(shù)據(jù)之間沒(méi)有分界線,接收方會(huì)誤認(rèn)為是一條數(shù)據(jù)。

2.UDP協(xié)議

UDP在收發(fā)數(shù)據(jù)時(shí)是基于數(shù)據(jù)包的,即一個(gè)包一個(gè)包的發(fā)送,包與包之間有明確的分界,到達(dá)對(duì)方緩沖區(qū)后也是獨(dú)立數(shù)據(jù)包。這種方式存在的問(wèn)題:

①發(fā)送數(shù)據(jù)的長(zhǎng)度每個(gè)操作系統(tǒng)會(huì)有不同的限制,數(shù)據(jù)超過(guò)限制則無(wú)法發(fā)送;

②接收方接收數(shù)據(jù)時(shí),如果應(yīng)用程序提供的緩存容量小于數(shù)據(jù)包的長(zhǎng)度,則會(huì)造成數(shù)據(jù)的丟失,而緩沖區(qū)大小不可能無(wú)限大。

這意味著UDP不會(huì)出現(xiàn)黏包問(wèn)題,但會(huì)丟失數(shù)據(jù),不可靠。

3.TCP協(xié)議

TCP增加了一套校驗(yàn)規(guī)則來(lái)保證數(shù)據(jù)的完整性,會(huì)將超過(guò)TCP包最大長(zhǎng)度的數(shù)據(jù)拆分為多個(gè)TCP包,并在傳輸數(shù)據(jù)時(shí)為每一個(gè)TCP數(shù)據(jù)包指定一個(gè)順序號(hào),接收方在收到TCP數(shù)據(jù)包后按照順序?qū)?shù)據(jù)包進(jìn)行重組,重組后的數(shù)據(jù)全都是二進(jìn)制數(shù)據(jù),且每次收到的二進(jìn)制數(shù)據(jù)之間沒(méi)有明顯的分界。基于這種工作機(jī)制,TCP在三種情況下發(fā)生黏包問(wèn)題:

①當(dāng)單個(gè)數(shù)據(jù)包較小時(shí),接收方可能一次性讀取了多個(gè)包的數(shù)據(jù);

②當(dāng)整體數(shù)據(jù)較大時(shí),接收方可能一次性僅讀取了一個(gè)包的一部分內(nèi)容;

③另外TCP協(xié)議為提高效率,增加了一種優(yōu)化機(jī)制,會(huì)將數(shù)據(jù)小且發(fā)送間隔短的數(shù)據(jù)合并發(fā)送,該機(jī)制也會(huì)導(dǎo)致發(fā)送方將兩個(gè)數(shù)據(jù)包粘在一起發(fā)送。

也就是說(shuō),TCP傳輸數(shù)據(jù)是可靠的,但是會(huì)黏包。

4.發(fā)送方出現(xiàn)的黏包

服務(wù)器端:

from socket import *
server_socket = socket(AF_INET,SOCK_STREAM)
server_socket.bind(('',8080))
server_socket.listen(5)
?
new_socket,client_addr = server_socket.accept()
?
data1 = new_socket.recv(1024)
data2 = new_socket.recv(1024)
print("收到的第一條數(shù)據(jù):",data1)
print("收到的第二條數(shù)據(jù):",data2)
?
new_socket.close()
server_socket.close()

客戶端:

from socket import *
?
client_socket = socket(AF_INET,SOCK_STREAM)
client_socket.connect(('10.175.193.126',8080))
client_socket.send('hello'.encode('utf-8'))
client_socket.send('word'.encode('utf-8'))
client_socket.close()

服務(wù)器端接收到的數(shù)據(jù):

由于客戶端兩條數(shù)據(jù)發(fā)送間隔太短且數(shù)據(jù)包太小,被服務(wù)器端誤認(rèn)為是一條數(shù)據(jù)。

5. 接收方出現(xiàn)的黏包

服務(wù)器端:

from socket import *
import time
?
server_socket = socket(AF_INET,SOCK_STREAM)
server_socket.bind(('',8080))
server_socket.listen(5)
?
new_socket,client_addr = server_socket.accept()
print("連接成功!",client_addr)
?
data1 = new_socket.recv(3) #每次只接收三個(gè)字節(jié),接收不完整
time.sleep(6)
print("收到的第一條數(shù)據(jù):",data1)
?
data2 = new_socket.recv(10)
#接收第一次未接收的數(shù)據(jù),若有空間,會(huì)繼續(xù)接收新數(shù)據(jù)
print("收到的第二條數(shù)據(jù):",data2)
?
new_socket.close()
server_socket.close()

客戶端:

from socket import *
#通過(guò)time模塊使客戶端發(fā)送多個(gè)數(shù)據(jù)包時(shí),時(shí)間間隔變長(zhǎng)
import time
?
client_socket = socket(AF_INET,SOCK_STREAM)
client_socket.connect(('10.175.193.126',8080))
client_socket.send('hello'.encode('utf-8'))
time.sleep(5) #讓當(dāng)前線程休眠5秒
client_socket.send('word'.encode('utf-8'))
?
client_socket.close()

服務(wù)器端接收到的數(shù)據(jù):

6.黏包的成因

①服務(wù)器端出現(xiàn)黏包:接收方不知道消息之間的界限,不知道一個(gè)消息要提取多少字節(jié)的數(shù)據(jù)造成的;

②客戶端出現(xiàn)黏包:TCP在發(fā)送數(shù)據(jù)少且間隔時(shí)間短的數(shù)據(jù)包時(shí),會(huì)將幾條合并一起發(fā)送。

到此這篇關(guān)于Python數(shù)據(jù)傳輸黏包問(wèn)題的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)傳輸黏包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python被修飾的函數(shù)消失問(wèn)題解決(基于wraps函數(shù))

    python被修飾的函數(shù)消失問(wèn)題解決(基于wraps函數(shù))

    這篇文章主要介紹了python被修飾的函數(shù)消失問(wèn)題解決(基于wraps函數(shù)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • pytorch 數(shù)據(jù)集圖片顯示方法

    pytorch 數(shù)據(jù)集圖片顯示方法

    今天小編就為大家分享一篇pytorch 數(shù)據(jù)集圖片顯示方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 對(duì)python中執(zhí)行DOS命令的3種方法總結(jié)

    對(duì)python中執(zhí)行DOS命令的3種方法總結(jié)

    今天小編就為大家分享一篇對(duì)python中執(zhí)行DOS命令的3種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助一起。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python SSL證書(shū)驗(yàn)證問(wèn)題解決方案

    Python SSL證書(shū)驗(yàn)證問(wèn)題解決方案

    這篇文章主要介紹了Python SSL證書(shū)驗(yàn)證問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Pycharm代碼無(wú)法復(fù)制,無(wú)法選中刪除,無(wú)法編輯的解決方法

    Pycharm代碼無(wú)法復(fù)制,無(wú)法選中刪除,無(wú)法編輯的解決方法

    今天小編就為大家分享一篇Pycharm代碼無(wú)法復(fù)制,無(wú)法選中刪除,無(wú)法編輯的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • pandas中df.rename()的具體使用

    pandas中df.rename()的具體使用

    本文主要介紹了pandas中df.rename()的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • django框架自定義模板標(biāo)簽(template tag)操作示例

    django框架自定義模板標(biāo)簽(template tag)操作示例

    這篇文章主要介紹了django框架自定義模板標(biāo)簽(template tag)操作,結(jié)合實(shí)例形式分析了Django框架自定義模板標(biāo)簽原理、操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-06-06
  • python原始套接字編程示例分享

    python原始套接字編程示例分享

    在實(shí)驗(yàn)中需要自己構(gòu)造單獨(dú)的HTTP數(shù)據(jù)報(bào)文,而使用SOCK_STREAM進(jìn)行發(fā)送數(shù)據(jù)包,需要進(jìn)行完整的TCP交互。因此想使用原始套接字進(jìn)行編程,直接構(gòu)造數(shù)據(jù)包,并在IP層進(jìn)行發(fā)送,即采用SOCK_RAW進(jìn)行數(shù)據(jù)發(fā)送。使用SOCK_RAW的優(yōu)勢(shì)是,可以對(duì)數(shù)據(jù)包進(jìn)行完整的修改,可以處理IP層上的所有數(shù)據(jù)包,對(duì)各字段進(jìn)行修改,而不受UDP和TCP的限制。
    2014-02-02
  • python包和文件夾有的區(qū)別點(diǎn)總結(jié)

    python包和文件夾有的區(qū)別點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python包和文件夾有的區(qū)別點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-09-09
  • 基于OpenCV實(shí)現(xiàn)小型的圖像數(shù)據(jù)庫(kù)檢索功能

    基于OpenCV實(shí)現(xiàn)小型的圖像數(shù)據(jù)庫(kù)檢索功能

    下面就使用VLAD表示圖像,實(shí)現(xiàn)一個(gè)小型的圖像數(shù)據(jù)庫(kù)的檢索程序。下面實(shí)現(xiàn)需要的功能模塊,分步驟給大家介紹的非常詳細(xì),對(duì)OpenCV圖像數(shù)據(jù)庫(kù)檢索功能感興趣的朋友跟隨小編一起看看吧
    2021-12-12

最新評(píng)論

江阴市| 鄯善县| 宾川县| 莆田市| 隆昌县| 天水市| 苏尼特右旗| 郁南县| 施秉县| 鄄城县| 铁力市| 宁海县| 浦江县| 东台市| 西盟| 根河市| 岳普湖县| 大名县| 南川市| 宝丰县| 苏尼特右旗| 吴旗县| 遂宁市| 昌黎县| 恩施市| 玛纳斯县| 喀喇沁旗| 阳原县| 新邵县| 布尔津县| 平定县| 涪陵区| 灵寿县| 老河口市| 鄂伦春自治旗| 平山县| 芜湖县| 洛宁县| 泸西县| 汤原县| 恩平市|