• python3 解决tcp黏包方法一


    -------------------------------------------tcp_server.py-------------------------------------------
    
    # coding:utf-8
    import socket
    import subprocess
    
    server = socket.socket()
    ip_port = ("127.0.0.1", 8001)
    server.bind(ip_port)
    server.listen(5)
    
    conn, addr = server.accept()
    from_client_msg = conn.recv(1024)
    print("来自客户端的消息:", from_client_msg.decode("utf-8"))
    cmd = input(">>>:").strip()
    res = subprocess.Popen(
        cmd,
        shell=True,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
    )
    cmd_result = res.stdout.read()
    if res.stderr.read():
        cmd_result = res.stderr.read()
    cmd_result_len = len(cmd_result)
    print(cmd_result_len)
    conn.send(str(cmd_result_len).encode("utf-8"))  # 先发送数据的长度
    from_client_msg = conn.recv(1024)
    if from_client_msg.decode("utf-8") == "recv_ready":
        conn.sendall(cmd_result)  # 再发送真实数据
    
    conn.close()
    server.close()
    
    
    
    
    -------------------------------------------tcp_client.py-------------------------------------------
    
    # coding:utf-8
    import socket
    
    client = socket.socket()
    ip_port = ("127.0.0.1", 8001)
    client.connect(ip_port)
    
    client.send("我是客户端.".encode("utf-8"))
    from_serve_msg = client.recv(1024)  # 接收数据长度
    print("来自服务端的消息:", from_serve_msg.decode("utf-8"))
    if from_serve_msg.decode("utf-8").isdigit():
        from_serve_msg_len = int(from_serve_msg)
        client.send("recv_ready".encode("utf-8"))
        from_serve_msg = client.recv(from_serve_msg_len)  # 接收真实数据
        recv_ready_len = len(from_serve_msg)
        while from_serve_msg_len > recv_ready_len:  # 如果真实数据一次没有接收完
            from_serve_msg += client.recv(from_serve_msg_len)  # 继续接收数据
            recv_ready_len = len(from_serve_msg)
    
        print("来自客户端的消息:", from_serve_msg.decode("gbk"))
    
    client.close() 
  • 相关阅读:
    【美菜网】PostgreSQL与MySQL比较
    MySQL数据库MyISAM和InnoDB存储引擎的比较
    【美菜网】in和exist区别
    【美菜网】on、where以及having的区别
    hive 行列转换
    postgresql 发生锁表时的解锁操作
    postgre 中获取某个字段最小的另一个字段的记录
    关于带分区hive表添加字段如何避免插入的新字段数据为null
    git使用入门
    怎么绕过前端的判断提交
  • 原文地址:https://www.cnblogs.com/lilyxiaoyy/p/10929947.html
Copyright © 2020-2023  润新知