import socket,os,time
server = socket.socket()
server.bind(("localhost",9999))
server.listen()while True:conn,addr=server.accept()print("new conn",addr)while True:print("等待新指令")data =conn.recv(1024)if not data:print("客户端已断开!")breakprint("执行命令:",data)cmd_res = os.popen(data.decode()).read()#接收字符串,执行结果也是字符串print("before send",len(cmd_res))if len(cmd_res) == 0:cmd_res = "cmd has no output..."conn.send(str(len(cmd_res.encode())).encode("utf-8")) #先发大小给客户端#time.sleep(0.5)client_ack =conn.recv(1024)#wait client to confirm 防止粘包conn.send(cmd_res.encode("utf-8"))print("send done")server.close()
上面是服务端socket_server.py
import socket
client =socket.socket()
client.connect(("localhost",9999))while True:cmd = input(">>:").strip()if len(cmd)==0:continueclient.send(cmd.encode("utf-8"))cmd_res_size =client.recv(1024)#接收命令结果的长度print("命令结果大小:",cmd_res_size)client.send("准备好接收了,loser可以发了".encode("utf-8"))#防止粘包received_size=0received_data=b''while received_size < int(cmd_res_size.decode()):data =client.recv(1024)received_size +=len(data)#每次收到的有可能小于1024,所以用len判断received_data +=dataelse:print("cmd res receive done...",received_size)print(received_data.decode())
client.close()
上面是客户端socket_client.py