我有一个项目,设备通过蓝牙通过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