为什么TCP会粘包UDP不会
为什么会出现粘包现象
struct模块:可以将2G的数字转换成四个字节,在转换回来
粘包现象怎么解决
发送方:计算将要发送数据的长度,发送方通过struct.pack模块把长度转换成固定的4个字节,发送四个字节的长度。
接收方:接受四个字节在使用struct.unpack把4个字节转换成数字,这个数字就是我们要接受数据的长度,接受完长度后再根据长度接受数据
服务端
# 服务端
import socket
import struct
sk=socket.socket()
sk.bind((‘127.0.0.1‘,1321))
sk.listen()
conn,addr=sk.accept()
mag1=input(‘>>>‘)
mag2=input(‘>>>‘)
conn.send(struct.pack(‘i‘,len(mag1)))
conn.send(struct.pack(‘i‘,len(mag2)))
conn.send(mag1.encode(‘utf-8‘))
conn.send(mag2.encode(‘utf-8‘))
conn.close()
sk.close()
客户端
#客户段
import socket
import time
import struct
sk=socket.socket()
sk.connect((‘127.0.0.1‘,1321))
time.sleep(0.1)
m1=struct.unpack(‘i‘,sk.recv(4))[0]
m2=struct.unpack(‘i‘,sk.recv(4))[0]
mag1=sk.recv(m1).decode(‘utf-8‘)
mag2=sk.recv(m2).decode(‘utf-8‘)
print(m1)
print(m2)
print(mag1)
print(mag2)
sk.close()
原文:https://www.cnblogs.com/xiaoxiannvdbky/p/14862016.html