发送数据时间间隔很短,数据也很小,会合到一起,产生粘包。
# TCP黏包现象_server.py import socket import time sk = socket.socket() sk.bind(("127.0.0.1", 8889)) sk.listen() conn, address = sk.accept() time.sleep(10) # 先让程序睡10秒,目的是制造黏包机会 msg = conn.recv(1024) # 这里很容易的就会产生黏包,客户端第一次和第二次发送的消息数据,会黏在一起。 print("来自客户端的消息:", msg.decode("utf-8")) send_msg = input(">>>:").strip() conn.send(send_msg.encode("utf-8"))
# TCP黏包现象_client.py import socket sk = socket.socket() sk.connect(("127.0.0.1", 8889)) send_msg = input(">>>:").strip() sk.send(send_msg.encode("utf-8")) # 客户端第一次发送消息给服务端 send_msg = input(">>>:").strip() sk.send(send_msg.encode("utf-8")) # 客户端第二次发送消息给服务端 recv_msg = sk.recv(1024) print("来自服务端的消息:", recv_msg.decode("utf-8"))
注意:
1、先启动服务端,再启动客户端。
2、根据程序写的谁先发送谁先接收的顺序,上述程序是,客户端先连续发送两个消息,服务端会收到黏包后的数据。