У меня есть проект, в котором устройство отправляет файл через Bluetooth через SPP на плату Raspberry Pi.В большинстве случаев файлы принимаются успешно, но иногда в файле отсутствуют некоторые байты, и устройство сообщает, что файл был успешно отправлен.
У меня нет контроля над отправляющим устройством, но я знаю, что оно устанавливает соединение, отправьте файл и затем закройте соединение.Если он хочет отправить несколько файлов, он отправляет только один файл на одно соединение и закрывает его, затем запускает другое соединение, чтобы отправить второй файл, затем закрывает его и т. Д.
На принимающей стороне (raspberry pi),я запускаю скрипт на python с прослушивающим сокетом RFCOMM-сервера и объявляю SPP через этот сокет.Затем я сохраняю все данные, полученные в байтовом массиве, и после завершения соединения сохраняю этот массив в файл и жду следующего соединения.
Размер файла варьируется, но всегда составляет около 200 КБ.Когда возникает эта проблема, отсутствующие байты всегда кратны 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