基於tgp協議的套接字的 粘包解決

2022-04-10 19:23:09 字數 2378 閱讀 9108

客戶端

import

socket

import

struct

import

json

phone = socket.socket(socket.af_inet, socket.sock_stream) #

買手機phone.connect(('

127.0.0.1

', 8082)) #

繫結手機卡

#發,收訊息

while

true:

cmd = input('

>>:

').strip()

ifnot cmd:continue

phone.send(cmd.encode(

'utf-8'))

#先收報頭的長度

header_len = struct.unpack('

i', phone.recv(4))[0]

#再收報頭

header_bytes =phone.recv(header_len)

header_json = header_bytes.decode('

utf-8')

header_dic =json.loads(header_json)

total_size = header_dic['

total_size']

#最後收資料

recv_size = 0 #

10241=10240+1

total_data = b''

while recv_size recv_data = phone.recv(1024)

recv_size +=len(recv_data)

total_data +=recv_data

print(total_data.decode('

gbk'

))phone.close()

服務端

import

socket

import

subprocess

import

struct

import

json

phone = socket.socket(socket.af_inet,socket.sock_stream) #

買手機phone.setsockopt(socket.sol_socket,socket.so_reuseaddr,1) #

就是它,在bind前加

phone.bind(('

127.0.0.1

',8082)) #

繫結手機卡

phone.listen(5) #

開機print('

starting...')

while true: #

鏈結迴圈

conn,client_addr=phone.accept() #

等** (鏈結,客戶的的ip和埠組成的元組)

print('

-------->

',conn,client_addr)

#收,發訊息

while true:#

通訊迴圈

try:

cmd = conn.recv(1024)

ifnot cmd:break

#針對linux

#執行cmd命令,拿到cmd的結果,結果應該是bytes型別

#。。。。

res = subprocess.popen(cmd.decode('

utf-8

'), shell=true,

stdout=subprocess.pipe,

stderr=subprocess.pipe)

stdout =res.stdout.read()

stderr =res.stderr.read()

#製作報頭

header_dic =

header_json =json.dumps(header_dic)

header_bytes = header_json.encode('

utf-8')

#傳送階段

#先發報頭長度

conn.send(struct.pack('i'

, len(header_bytes)))

#再發報頭

conn.send(header_bytes)

#最後傳送命令的結果

conn.send(stdout)

conn.send(stderr)

except

exception:

break

conn.close()

#掛**

phone.close() #

關機

基於udp協議的套接字及udp協議粘包問題

udp協議的套接字 udp協議傳輸 服務端和客戶端沒有建立連線一說。import socket 總結一下基礎工作流程 服務端生成套接字並繫結ip port,進入資料傳輸迴圈,服務端接受客戶端傳送的資訊和位址,然後服務端對客戶端請求做出響應,傳送處理好的資料根據而客戶端位址。客戶端建立套接字,直接進入...

基於tcp協議的套接字

簡單版本 一 服務端 import socket 1 買手機 拿到套接字物件,用來鏈結建立鏈結 phone socket.socket socket.af inet,socket.sock stream tcp稱為流式協議sock stream,udp稱為資料報協議sock dgram print ...

基於TCP協議的套接字程式設計

socket是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。socket模板已經為我們封裝好了,我...