Socket-实例

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("客户端已断开!")
            break
        print("执行命令:",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:
        continue
    client.send(cmd.encode("utf-8"))
    cmd_res_size =client.recv(1024)#接收命令结果的长度
    print("命令结果大小:",cmd_res_size)
    client.send("准备好接收了,loser可以发了".encode("utf-8"))#防止粘包
    received_size=0
    received_data=b''
    while received_size < int(cmd_res_size.decode()):
        data =client.recv(1024)
        received_size +=len(data)#每次收到的有可能小于1024,所以用len判断
        received_data +=data
    else:
        print("cmd res receive done...",received_size)
        print(received_data.decode())
client.close()

 上面是客户端socket_client.py

原文地址:https://www.cnblogs.com/fuyuteng/p/9129425.html