为什么在蓝牙RFCOMM通道上丢失了一些数据?

时间:2019-02-06 11:29:03

标签: python bluetooth raspberry-pi rfcomm bluetooth-socket

我有一个项目,设备通过蓝牙通过SPP将文件发送到树莓派板上。大多数情况下,文件会被成功接收,但有时文件会丢失一些字节,并且设备会报告文件已成功发送。

我无法控制发送设备,但我知道它会启动连接,发送文件然后关闭连接。如果要发送多个文件,则每个连接仅发送一个文件并关闭它,然后启动另一个连接以发送第二个文件,然后关闭它,依此类推。

在接收端(树莓派)上,我运行带有侦听RFCOMM服务器套接字的python脚本,并在该套接字上发布了SPP。然后,我将接收到的所有数据保存在字节数组中,连接终止后,将该数组保存到文件中,等待下一个连接。

文件大小各不相同,但始终约为200KB。发生此问题时,丢失的字节总是128的倍数(例如256、384)。

该代码在98%的时间内都能正常工作。(我测试了100个文件,其中只有2个有此问题)

该问题是随机发生的,我找不到有关何时发生的任何模式。

代码是否有问题?? 如果不是,什么可能导致此问题?

我的代码如下:

report_count = 0 
server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)
advertise_service(server_sock, "Server",service_classes = [ SERIAL_PORT_CLASS ],profiles = [ SERIAL_PORT_PROFILE ] )

while 1:
    client_sock, client_info = server_sock.accept()
    print ("Accepted connection from ",client_info)
    data = b""
    try:
        while 1:
            data += client_sock.recv(1024)

    except:
        with open(str(report_count)+".pcl", "ab") as f:
            f.write(data)
        client_sock.close()
        print("Socket closed")
        report_count +=1

0 个答案:

没有答案