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)
复制代码

 

posted @   Wchime  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示