目录
* 一、服务端 <https://www.cnblogs.com/nickchen121/p/11030880.html#一服务端>
* 二、客户端 <https://www.cnblogs.com/nickchen121/p/11030880.html#二客户端>
一、服务端
from socket import * import subprocess server = socket(AF_INET, SOCK_STREAM)
server.bind(('127.0.0.1', 8000)) server.listen(5) print('start...') while True:
conn, client_addr = server.accept() while True: print('from client:',
client_addr) cmd = conn.recv(1024) if len(cmd) == 0: break print('cmd:', cmd)
obj = subprocess.Popen(cmd.decode('utf8'), # 输入的cmd命令 shell=True, # 通过shell运行
stderr=subprocess.PIPE, # 把错误输出放入管道,以便打印 stdout=subprocess.PIPE) #
把正确输出放入管道,以便打印 stdout = obj.stdout.read() # 打印正确输出 stderr = obj.stderr.read() #
打印错误输出 conn.send(stdout) conn.send(stderr) conn.close() server.close()
二、客户端
import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8000)) while True: data = input('please enter your
data') client.send(data.encode('utf8')) data = client.recv(1024) print('from
server:', data) client.close()
输入dir命令,由于服务端发送字节少于1024字节,客户端可以接受。
输入tasklist命令,由于服务端发送字节多于1024字节,客户端只接受部分数据,并且当你再次输入dir命令的时候,客户端会接收dir
命令的结果,但是会打印上一次的剩余未发送完的数据,这就是粘包问题。
热门工具 换一换