TCP协议中粘包现象
在tcp协议网络传输中,才会出现粘包,udp协议不会出现.
tcp的协议数据不会丢,没有收完包,会继续上次继续接收,总是在收到ack时才会清除缓冲区内容。数据是可靠的,但是就会粘包。
因为数据发送和接收过程先经过缓冲区,由于数据大小以及网络原因,导致收发信息不能严格同步,造成数据粘连的现象叫做粘包
粘包有两种形式:
1.客户端send()发送了一段数据,服务端只recv()收取了一小部分,下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包.
2.发送端发送数据时间间隔很短,数据也很小,会合到一起,产生粘包.
1 import socket 2 sk = socket.socket() 3 sk.bind(("127.0.0.1", 10096)) 4 sk.listen(1) 5 s, k = sk.accept() 6 n = s.recv(1) 7 print(n) 8 n1 = s.recv(3) 9 print(n1) 10 s.send(b\'w\') 11 s.send(b\'w\') 12 s.send(b\'w\') 13 s.send(b\'w\')
服务端
1 import socket 2 sk = socket.socket() 3 sk.connect(("127.0.0.1", 10096)) 4 sk.send(b"1") 5 sk.send(b"1") 6 sk.send(b"1") 7 a = sk.recv(10) 8 print(a)
客户端
服务端输出结果:
b\’1\’
b\’11\’
或者
b\’1\’
b\’1\’
客户端输出结果:
b\’w\’
或者
b\’wwww\’