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 @ 2023-02-21 20:18  Wchime  阅读(18)  评论(0)    收藏  举报