day28-黏包現象


#
黏包現象:信息還沒接收完,下一次接收的時候一會兒接收好幾條黏在一塊兒的信息。 #黏包現象的緣由:接收端不知道發送端發送的數據的長度。recv(字節數小了)。 # 第一次沒法接收完就緩存起來,下一次接收。 #只有TCP纔會黏包,UDP不會黏包。 #TCP的黏包現象: #server下發信息給多個client,控制它們幹活。 #server端: import socket sk = socket.socket() sk.bind(('127.0.0.1',8888)) sk.listen() conn,addr = sk.accept() while True: cmd = input('>>>') if cmd == 'q': conn.send(b'q') break conn.send(cmd.encode('gbk')) #encode編碼,把str轉化爲bytes。 ret = conn.recv(4).decode('gbk') #一次只接收4個字節,會發生黏包現象。 print(ret) conn.close() sk.close() #client端: import socket import subprocess sk = socket.socket() sk.connect(('127.0.0.1',8888)) while True: cmd = sk.recv(1024).decode('gbk') if cmd == 'q': break ret = subprocess.Popen(cmd,shell=True, #打開收到的信息。shell=True意思是執行操做系統的命令。 stdout=subprocess.PIPE,#輸出結果放在PIPE管道里面 stderr=subprocess.PIPE)#輸出錯誤放在另外一個PIPE管道里面 sk.send(ret.stdout.read()) sk.send(ret.stderr.read()) sk.close()
相關文章
相關標籤/搜索