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 socketimport 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...