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

  • 相关阅读:
    PCB 铺铜 转载
    VC++ 学习笔记3 获取编辑框字符串
    VC++ 学习笔记2 列表框添加字符串
    VC++组合框——学习笔记1(组合框选项的添加和无法显示下拉选项)
    微信蓝牙ble记录
    最近遇到的问题与分析还有可能的结果
    注入与以往的开发思路
    abp的权限与导航菜单的关系
    ionic入坑记记录
    abp相关
  • 原文地址:https://www.cnblogs.com/fuyuteng/p/9129425.html
Copyright © 2011-2022 走看看