粘包现象 只出现在tcp协议中 多条消息之间没有边界,并且还有一大堆优化算法
发送端:两条消息很短并且发送的间隔很短
接收端:接收消息不及时
解决粘包问题的本质:设置边界
计算即将要发送的数据的长度
通过struct模块把长度转换成固定的4个字节
发送4个字节的长度
接受4个字节
再使用struct.unpack把4个字节转换成数字
这个数字就是即将要接受的数据的长度
再根据长度接收数据
两条数据就不会黏在一起了
服务端:
import socketserver import time class Myserver(socketserver.BaseRequestHandler): def handle(self): # print(self.request) conn = self.request while True: try: content = conn.recv(1024).decode("utf-8") conn.send(content.upper().encode("utf-8")) time.sleep(0.5) except Exception: break server = socketserver.ThreadingTCPServer(("127.0.0.1", 8080), Myserver) server.serve_forever()
客户端:
import socket sk = socket.socket() sk.connect(("127.0.0.1", 8080)) while True: sk.send(b"hello") content = sk.recv(1024).decode("utf-8") print(content)
标签:sk,字节,tcp,粘包,content,现象,长度 From: https://www.cnblogs.com/moon3496694/p/17142292.html