Нестабильное поведение Pybluez на разных устройствах - Python - PullRequest
0 голосов
/ 02 сентября 2018

У меня 3 устройства -> 2 * ПК и 1 Raspberry Pi. 2 ПК только для тестирования. 2PC = 2 ноутбука с Windows 10.

На Rasberry Pi у меня есть служба Bluetooth (Py 2.7, но 3.5 также должен работать, если print ()):

import bluetooth

try:
    server_sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
    server_sock.bind(("",0))
    server_sock.listen(100)
    bluetooth.advertise_service( server_sock, "MyService",
    service_classes = [ bluetooth.SERIAL_PORT_CLASS ],
    profiles = [ bluetooth.SERIAL_PORT_PROFILE ] )
    client_sock, client_info = server_sock.accept()
    print("Accepted connection from ", client_info)
    client_sock.send('Hello')
    data = client_sock.recv(1024)
    print("received [%s]" % data)
    client_sock.close()
    server_sock.close()
except:
    client_sock.close()
    server_sock.close()

На ноутбуках у меня есть клиент

import sys
from bluetooth import *

try:
    service_matches = find_service(name="MyService",
    uuid = SERIAL_PORT_CLASS )
    print(service_matches)
    if len(service_matches) == 0:
        print('Found nothing')
        sys.exit(0)

    for i in service_matches:
        print(i)
    first_match = service_matches[0]
    port = first_match["port"]
    name = first_match["name"]
    host = first_match["host"]
    print "connecting to ", host
    sock=BluetoothSocket( RFCOMM )
    sock.connect((host, port))
    data = sock.recv(1024)
    sock.send("hello!!")

    print(data)
    sock.close()
except Exception as e:
    print(e)
    sock.close()

Все работает просто отлично, однако с одним ноутбуком я могу повторять процесс между прослушиванием и подключением навсегда. С другим Laptot я могу подключиться 2-3 раза, а затем получаю эту ошибку:

in <module>
    uuid = SERIAL_PORT_CLASS )
  File "C:\Python27\lib\site-packages\bluetooth\msbt.py", line 204, in find_service
    addresses = discover_devices (lookup_names = False)
  File "C:\Python27\lib\site-packages\bluetooth\msbt.py", line 15, in discover_devices
    devices = bt.discover_devices(duration=duration, flush_cache=flush_cache)
IOError: No more data is available.

Это означает, что ошибка произошла внутри функции pybluez find_service. Интересно, что это происходит, когда он не может найти устройство. На другом ноутбуке, где эта ошибка никогда не срабатывает (всегда подключается), но нет устройств, всегда заканчивается: печать («Ничего не найдено»)

Когда ошибка появляется после 2-3 успешных подключений, мне нужно перезапустить Raspberry pi, чтобы иметь возможность подключиться снова.

Спасибо за любую помощь

...