Python之网络编程(粘包、粘包解决方案)


粘包现象是指发送方发送的若干数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。粘包现象只会在tcp中出现,udp中不会有,因为udp是基于包来传输信息的,就一个sendto()对应另一个recvfrom()

tcp粘包

第一种粘包

发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据也很小,会合到一起发送,产生粘包)
服务端测试代码:

from socket import *
import subprocess

ip_port=('192.168.43.247',8080)  #记录ip地址
back_log = 5  #端口数为5
buffer_size = 1024  #表示可以发送消息的大小为1024字节

tcp_server= socket(AF_INET,SOCK_STREAM)  #建立socket对象
tcp_server.bind(ip_port)  #绑定ip地址
tcp_server.listen(back_log)  #监听端口

conn, addr= tcp_server.accept()  #获取客户端链接

#第一种粘包,能收的量太大了
#会出现第一种粘包现象,因为可以收的数据远大于真实传来的数据,
#tcp内的优化算法会把几个短的数据合成一个数据来发送

#接收消息
data1 = conn.recv(buffer_size)  #都能收1024字节
print('第一个消息:',data1.decode('utf-8'))
data2 = conn.recv(buffer_size) 
print('第二个消息:',data2.decode('utf-8'))
data3 = conn.recv(buffer_size)
print('第三个消息:',data3.decode('utf-8'))

conn.close()  #关闭链接

客户端测试代码:
可以看到是一个简单的发送3条消息

from socket import *
import subprocess

ip_port=('192.168.43.247',8080)  #记录ip地址
back_log = 5  #端口数为5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿蒙Next

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值