python socket 粘包問題

2022-03-09 13:38:57 字數 1523 閱讀 9629

解決粘包的問題:

1.服務端在傳送資料之前,先把傳送資料的長度告訴客戶端,要傳送多少資料,然後客戶端根據這個資料的長度迴圈接收就ok

傳輸過程:

服務端:

1.send  #資料長度

4.recv  #收到確認資訊,開始下一步傳送

send  #傳送資料

客戶端 :

2.recv #獲取資料長度

3.send #傳送確認資訊

recv #迴圈接收

socket-server端**:

#

解決粘包問題

send_data = bytes(send_data,encoding='

utf-8

') #

編碼成utf-8,位元組,並把str轉換為位元組

ready_tag = '

ready|%s

' %len(send_data)

conn.send(bytes(ready_tag,encoding='

utf-8'))

feedback = conn.recv(1024) #

收到客戶端傳送過來的start

feedback = str(feedback,encoding='

utf-8

') #

把收到的feedback 轉換為str

if feedback.startswith('

start'):

conn.send(send_data)

socket-client端**:

#

解決粘包的問題

ready_tag = s.recv(1024) #

ready|9999

ready_tag = str(ready_tag,encoding='

utf-8')

if ready_tag.startswith('

ready

'): #

ready|9999

msg_size = int(ready_tag.split('

|')[-1])

start_tag = '

start

's.send(bytes(start_tag,encoding='

utf-8

')) #

給server傳送start,告訴server可以準備傳送資料了

recv_size = 0 #

初始化資料大小

recv_msg =b''

while recv_size recv_data = s.recv(1024)

recv_msg +=recv_data

recv_size +=len(recv_data)

print('

msg size %s rece size %s

' %(msg_size, recv_size))

print(str(recv_msg,encoding='

utf-8

'))

TCP粘包 拆包

tcp粘包 拆包 客戶端發服務端傳送了兩個資料報a和b 粘包 服務端一次性接收到了a和b 拆包 服務端第一次接收了a和b的一部分,第二次接收到了b的剩餘部分 粘包 拆包原因 1 應用程式寫入的位元組大小 socket傳送緩衝區大小 2 tcp分段 tcp data部分的大小 mss max segm...

TCP粘包,拆包

粘包 拆包表現形式 現在假設客戶端向服務端連續傳送了兩個資料報,用packet1和packet2來表示,那麼服務端收到的資料可以分為三種,現列舉如下 第一種情況,接收端正常收到兩個資料報,即沒有發生拆包和粘包的現象,此種情況不在本文的討論範圍內。第二種情況,接收端只收到乙個資料報,由於tcp是不會出...

TCP粘包 拆包

粘包 拆包問題是網路比較底層的問題,在資料鏈路層 網路層以及傳輸層都有可能發生。我們日常的網路應用開發大都在傳輸層進行,由於udp有訊息保護邊界,不會發生粘包拆包問題,因此粘包拆包問題只發生在tcp協議中。假設客戶端向服務端連續傳送了兩個資料報,用packet1和packet2來表示,那麼服務端收到...