解决黏包问题:
在传输大量数据之前,先告诉接收端要发送数据大小
如果想更漂亮的解决问题,可以通过struct模块来定制协议
为什么会出现黏包现象:
首先只有在tcp协议中才会出现黏包现象
是因为tcp协议是面向流的协议
在发送的数据传输的过程中还有缓存机制来避免数据丢失
因此 在连续发送小数据的时候,以及接受大小不符的时候都容易出现黏包现象
本质还是因为我们在接受数据的时候不知道发送的数据长短
struck模块
pack unpack
模式:i
pack之后的长度:4个字节
unpack之后拿到的数据是一个元祖:元祖的第一个元素才是pack的值
#server import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): #self.request 就相当于conn while True: msg = self.request.recv(1024).decode('utf-8') if msg == 'q': # self.request.close() break print(msg) info = input('>>>>') self.request.send(info.encode('utf-8')) if __name__ == '__main__': server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer) #thread线程 server.serve_forever() #client import socket sk = socket.socket() sk.connect(('127.0.0.1',8080)) while True: msg = input('>>>>') if msg == 'q': break sk.send(('大众点评 :'+msg).encode('utf-8')) ret = sk.recv(1024).decode('utf-8') print(ret) sk.close()