RFCOMM sans liaison à l'aide d'PyBluez sur Debian?
Je suis en train de créer un RFCOMM processus de serveur avec Python qui peuvent être utilisés sans la nécessité pour le couplage. D'abord, j'ai attrapé les deux exemples de scripts à partir de la PyBluez documentation:
Serveur:
# file: rfcomm-server.py
# auth: Albert Huang <[email protected]>
# desc: simple demonstration of a server application that uses RFCOMM sockets
#
# $Id: rfcomm-server.py 518 2007-08-10 07:20:07Z albert $
from bluetooth import *
server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]
uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"
advertise_service( server_sock, "SampleServer",
service_id = uuid,
service_classes = [ uuid, SERIAL_PORT_CLASS ],
profiles = [ SERIAL_PORT_PROFILE ],
# protocols = [ OBEX_UUID ]
)
print "Waiting for connection on RFCOMM channel %d" % port
client_sock, client_info = server_sock.accept()
print "Accepted connection from ", client_info
try:
while True:
data = client_sock.recv(1024)
if len(data) == 0: break
print "received [%s]" % data
except IOError:
pass
print "disconnected"
client_sock.close()
server_sock.close()
print "all done"
Client:
# file: rfcomm-client.py
# auth: Albert Huang <[email protected]>
# desc: simple demonstration of a client application that uses RFCOMM sockets
# intended for use with rfcomm-server
#
# $Id: rfcomm-client.py 424 2006-08-24 03:35:54Z albert $
from bluetooth import *
import sys
addr = None
if len(sys.argv) < 2:
print "no device specified. Searching all nearby bluetooth devices for"
print "the SampleServer service"
else:
addr = sys.argv[1]
print "Searching for SampleServer on %s" % addr
# search for the SampleServer service
uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"
service_matches = find_service( uuid = uuid, address = addr )
if len(service_matches) == 0:
print "couldn't find the SampleServer service =("
sys.exit(0)
first_match = service_matches[0]
port = first_match["port"]
name = first_match["name"]
host = first_match["host"]
print "connecting to \"%s\" on %s" % (name, host)
# Create the client socket
sock=BluetoothSocket( RFCOMM )
sock.connect((host, port))
print "connected. type stuff"
while True:
data = raw_input()
if len(data) == 0: break
sock.send(data)
sock.close()
Lorsque j'ai exécuté le script serveur sur Windows, tout a fonctionné exactement comme je l'avais espéré - pas de couplage a été nécessaire. À ce stade, tout avait l'air très prometteur.
Cependant, j'ai besoin de processus de serveur pour fonctionner sous Debian Squeeze. Quand je l'ai tester sur Debian, le client, la connexion est refusée. Dans le syslog il y a des messages à partir de bluetoothd de l'échec d'une clé de liaison et de demande de demande de PIN.
Informations de Version:
- PyBluez 0.18
- Python 2.6
- Bluez 4.66
- Bluetooth v2.0 matériels sur les deux extrémités de la connexion
Cette discussion semble suggérer que, si je peux ajuster le niveau de sécurité sur le serveur douille de couplage sera désactivé et tout ce que tout fonctionne comme prévu. Il n'est pas évident pour moi comment faire cela avec PyBluez bien, ou même si c'est possible.
J'ai expérimenté avec des appels à setsockopt() à l'aide de divers BT_SECURITY* constantes, ainsi que l'accaparement de la dernière PyBluez et de l'appel de setl2capsecurity (), mais n'ont pas été en mesure de faire des progrès.
Est-ce que ce sera réalisable avec PyBluez?
OriginalL'auteur Tim Connolly | 2013-01-31
Vous devez vous connecter pour publier un commentaire.
Ce qui s'est avéré être un problème avec la Debian Squeeze bluez configuration par défaut.
Si quelqu'un d'autre hits ce problème, désactivez le pnat plugin en éditant /etc/bluetooth/main.conf:
Puis redémarrez bluetoothd.
Aucun changement n'était nécessaire à la PyBluez code.
Merci! Très utile. Je suis sur Ubuntu 12.04. J'ai aussi trouvé de tuer le bluetooth processus de l'agent à l'aide.
N'aurais jamais compris cela, je vous remercie! Travaillé sur Raspbian OS. Toute chance vous pourriez ajouter un peu d'info sur ce qui est exactement pnat et pourquoi sa activé par défaut? Je ne trouve pas beaucoup d'info sur...
Ce rapport de bogue Debian a plus d'informations: bugs.debian.org/cgi-bin/bugreport.cgi?bug=690749
Le problème se produit toujours pour moi sur Raspbian, tous les indicateurs comment le corriger? Merci pour le heads up 🙂
OriginalL'auteur Tim Connolly