struct模块解决黏包问题
Posted kuraki
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struct模块解决黏包问题相关的知识,希望对你有一定的参考价值。
client端执行命令
import socket import subprocess import struct sk = socket.socket() sk.connect((‘127.0.0.1‘,8080)) while True: cmd = sk.recv(1024).decode(‘gbk‘) if cmd ==‘q‘: break res = subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout = res.stdout.read() stderr = res.stderr.read() length = len(stdout)+len(stderr) num_bytes = struct.pack(‘i‘,length) sk.send(num_bytes) sk.send(stdout) sk.send(stderr) sk.close()
server端发送命令
import socket import struct sk = socket.socket() sk.bind((‘127.0.0.1‘,8080)) sk.listen() conn,addr = sk.accept() while True: cmd = input(‘>>>‘) if cmd == ‘q‘: conn.send(b‘q‘) break conn.send(cmd.encode(‘gbk‘)) num = conn.recv(4) num = struct.unpack(‘i‘,num)[0] res = conn.recv(int(num)).decode(‘gbk‘) print(res) conn.close() sk.close()
以上是关于struct模块解决黏包问题的主要内容,如果未能解决你的问题,请参考以下文章