在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\’

 

版权声明:本文为NoteBook3013原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/NoteBook3013/p/10406887.html