tcp的粘包现象
粘包现象 只出现在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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!