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'

原文地址:https://www.cnblogs.com/NoteBook3013/p/10406887.html