python socket接收数据不完整_Python Socket传输文件不完整

在Python中使用socket进行文件传输时遇到了文件不完整的问题。通过调整接收块大小并修正数据长度累计方式解决了该问题。文章详细介绍了问题发现、原因分析以及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Introduction

嵌入式课程的实验正在加紧写,做的是树莓派小车。写完以后准备写个专辑文章。本文说明的python socket传输文件不完整问题,就是在小车(server)向PC(client)传输图像文件时产生的。记录下问题的发现和解决。

问题发现

在使用python3 socket进行传输图片时,文件不完整,源文件有28KB的大小,但是传输到PC上的数据写到文件里,不足28KB。

猜测

一开始猜测是server发送有问题:

with open('/home/pi/motion/lastsnap.jpg', 'rb')as fin:

r = fin.read(block_size)

while r:

self.request.send(r)

r = fin.read(block_size)

其实最一开始是直接 fin.read() 发送的,我以为是因为一次性发送太多了,所以改成了分块发送。但跟这个发送的数据是没有关系的。

socket传输文件不完整 中说是因为每次发送的数据包大小问题:

每次发送的数据包不要太大!最好是1024byte。我试过,如果是8192,有80%的数据丢了;如果是4096,有50%的数据丢了;如果是512,数据基本得到保证!

据此,我对client的接收代码进行了修改,将接收的块大小进行缩小:

block_size = 2048

file_size = int(s.recv(block_size))

print(file_size)

recv_data_size = 0

data = b''

with open('/home/find/ddown/test.jpg', 'wb') as fout:

while recv_data_size < file_size:

data = s.recv(block_size)<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值