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() 
原文地址:https://www.cnblogs.com/lilyxiaoyy/p/10929947.html