我在python中使用UDP时有很多数据包丢失。我知道如果我不想丢失数据包,我应该使用TCP,但是我没有(完全)控制发送方。在
它是一个使用UDP多播每秒发送15个图像的摄像头。在
下面是我写的代码。
它使用多处理来允许生产者和消费者函数并行工作。Producer函数捕获包,consumer函数处理它们并将图像写入.bmp文件。在
我已经编写了一个类PacketStream,它将包中的字节写入.bmp文件。在
当摄像机发送新图像时,首先发送一个包,第一个字节=0x01。这包含有关图像的信息。
然后发送612个数据包,第一个字节=0x02。这些包含来自映像的字节(508字节/包)。在
由于每秒发送15个图像,每秒发送约9000个数据包。尽管这种情况在每个图像中以更快的速度发生,大约为22包/毫秒
我可以使用tcpdump或wireshark完美地接收所有数据包。
但是使用下面的代码,包会丢失。
当然,我的Windows7电脑应该可以处理这个问题?我也在树莓皮3上使用它,或多或少有相同数量的数据包丢失。所以我认为这是代码的问题。在
我尝试过很多不同的方法,比如线程而不是多处理,管道而不是队列。在
我还尝试用sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 3000000)
无济于事。在
在python中这是可能的吗?在
提前谢谢你
^{pr2}$
编辑
谢谢你的建议。在
1)我已经尝试过threading+queue,也尝试了'.join()&#