粘包的高大上版本

2022-07-24 02:54:14 字數 2228 閱讀 1032

import

socket

import

subprocess

import

json

import

struct

server =socket.socket(socket.af_inet,socket.sock_stream)  #socket.af_inet 基於網路的 socket.sock_stream

server.bind((

'127.0.0.1

',8848))                  #繫結ip和埠時要用元祖的形式

server.listen(5)

while

true:

conn,addr =server.accept()                  #等待客戶端的接入

while

true:

try:

cmd = conn.recv(1024).decode('

utf-8

')        #接收的命令必須是解碼後的命令 不然會報錯

obj =subprocess.popen(              #crm的命令載入框架

cmd,

shell=true,

stdout=subprocess.pipe,

stderr=subprocess.pipe,

)right_msg =obj.stdout.read()

error_msg =obj.stderr.read()

file =

dic_json = json.dumps(file) #

將字典序列化為字串

dic_json_bytes = dic_json.encode('

utf-8

') #

將字典的字串轉化為位元組

dic_json_bytes_len = struct.pack('

i',len(dic_json_bytes)) #

將字典的位元組數轉化為固定的四個位元組

conn.send(dic_json_bytes_len)

conn.send(dic_json_bytes)

conn.send(right_msg+error_msg)

except

exception:

break

conn.close()

server.close()

以上是服務端的**:注意點 程式設計中接收和傳送的都是位元組 

資料的傳送都是位元組的形式:通過三次傳送報頭,字典的位元組,以及資料的位元組

報頭和字典都是輔助資料 都只是為了解決接收資料時可能會產生粘包問題做的鋪墊 

客戶端的**:

import socket

import struct

import json

client = socket.socket()

client.connect(('127.0.0.1',8848)) #ip和埠用的是元祖的形式

cmd = input('>>>')

client.send(cmd.encode('utf-8'))

dic_json_bytes_len = client.recv(4) #接收報頭 固定四個位元組

dic_json_bytes = struct.unpack('i',dic_json_bytes_len)[0] #struct.unpack解包後的資料為元祖

dic_json_encode = client.recv(dic_json_bytes) #接收字典的位元組數 根據報頭解包出字典的位元組數 判斷接收字典的位元組

dic_json = dic_json_encode.decode('utf-8') #字串

dic = json.loads(dic_json) #得到字典的原型

total_data = b''

while len(total_data) < dic['file_size']:#接收的位元組數小於資料的位元組數式,以每次接收1024的數量進行迴圈,直至接收完畢

data = client.recv(1024)

total_data += data

print(total_data.decode('gbk'))

緩衝區,粘包,解決粘包的方法,

緩衝區 暫時存放傳輸資料的,防止你的程式在傳送資料的時候卡主,提高 執行效率 輸入緩衝區 recv 輸出緩衝區 send 緩衝區有長度限制 mtu最大傳輸單元,網路層限制是1500b,每次傳送資料的時候最好不要超過這個數 粘包粘包現象 1.連續傳送小的資料,間隔時間很短,有可能一次就接受歐到了這幾個...

高大上的2014WE大會

2014 11 19 20 47 生活雜記 標籤 科技 935 這麼多的新技術擺在我們面前,實在是讓人大呼過癮。那麼問題來了,我們創造新技術是為了什麼?新技術終歸還是要為人服務的,單純的技術存在感簡直弱爆了。在大會上,我們能看到專家嘉賓所提出的空氣觸覺互動技術 生物感知技術,光聽名字就知道是高大上的...

高大上的介紹實時流式計算!

實時流式計算,也就是realtime,streaming,analyse,在不同的領域有不同的定義,這裡我們說的是大資料領域的實時流式計算。實時流式計算,或者是實時計算,流式計算,在大資料領域都是差不多的概念。那麼,到底什麼是實時流式計算呢?谷歌大神tyler akidau在 the world b...