zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    php中的多态
    面向对象的继承与组合
    PHP中的__call和__callStatic方法
    PHP中的__set和__get方法
    PHP中对象的本质
    mysql字符串查找(统计客源)
    linux查看文件大小
    mysql常用字符串操作函数大全,以及实例
    mysql滑动订单问题
    mysql列反转Pivoting
  • 原文地址:https://www.cnblogs.com/fuyuteng/p/9129425.html
Copyright © 2011-2022 走看看