python粘包問(wèn)題及socket套接字編程詳解-創(chuàng)新互聯(lián)

粘包問(wèn)題

創(chuàng)新互聯(lián)公司IDC提供業(yè)務(wù):綿陽(yáng)電信機(jī)房機(jī)柜租用,成都服務(wù)器租用,綿陽(yáng)電信機(jī)房機(jī)柜租用,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動(dòng)機(jī)房,聯(lián)通機(jī)房。

TCP協(xié)議在傳輸過(guò)程中會(huì)出現(xiàn)數(shù)據(jù)粘包問(wèn)題

講一下TCP和UDP的區(qū)別,都是傳數(shù)據(jù)的協(xié)議,沒(méi)有好壞之說(shuō),只是不同的應(yīng)用需求可能會(huì)更好選擇哪一個(gè)協(xié)議

TCP:適合傳輸數(shù)量大 ,需要建立連接,會(huì)出現(xiàn)粘包問(wèn)題,粘包問(wèn)題可以解決,確定傳入的長(zhǎng)度,接收同樣長(zhǎng)度就可以保證一次性傳輸完

UDP: 適合傳輸數(shù)據(jù)量小,沒(méi)有粘包,不需要連接,一次性傳輸,下一次就是新的數(shù)據(jù),弊端就是數(shù)據(jù)丟失,不安全

QQ是用什么協(xié)議呢?按理應(yīng)該可以用UDP協(xié)議,但是實(shí)際用的是TCP協(xié)議,這是歷史遺留問(wèn)題,可還記得我們輸入QQ一次性輸入的內(nèi)容字?jǐn)?shù)有限制嗎?就是規(guī)定了發(fā)送與接收的數(shù)據(jù)長(zhǎng)度是一樣的.

形成粘包的原因


1.兩個(gè)數(shù)據(jù)非常小,然后間隔時(shí)間又短

2.數(shù)據(jù)太大,一次取不完,下一次還會(huì)取這個(gè)大數(shù)據(jù)

解決粘包問(wèn)題


==在傳數(shù)據(jù)之前,傳一個(gè)數(shù)據(jù)的大小,數(shù)據(jù)的大小必須得定長(zhǎng)==

# TCP 解決粘包問(wèn)題 附帶處理了一下
import socket
import struct
import subprocess
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 8000))
server.listen(5)
print('start...')
# 連接循環(huán)
while True:
conn, client_address = server.accept()
print(client_address)
# 通信循環(huán)
while True:
try:
cmd = conn.recv(1024)
print(cmd)
pipeline = subprocess.Popen(cmd.decode('utf8'),
shell=True,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE)
stdout = pipeline.stdout.read()
stderr = pipeline.stderr.read()
count_len = len(stdout) + len(stderr)
guding_bytes = struct.pack('i', count_len)
conn.send(guding_bytes) # 4
conn.send(stderr + stdout)
except ConnectionResetError: # 連接循環(huán)時(shí)出現(xiàn)的中斷
break
conn.close()

網(wǎng)站題目:python粘包問(wèn)題及socket套接字編程詳解-創(chuàng)新互聯(lián)
地址分享:http://bm7419.com/article14/gidde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、ChatGPT、定制網(wǎng)站云服務(wù)器、電子商務(wù)、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站