我目前有一个针对PyBlueZ的客户端/服务器对。现在,服务器可以连接到顺序的客户端-它将一直工作到与一个客户端完成连接,然后它将开始监听另一个客户端。

但是,我真正想要的是在单独的线程中运行客户端通信,因此我可以同时拥有多个客户端。但是,当我尝试第二个客户端连接时,PyBlueZ会通告第一个客户端当前正在使用的相同端口。我正在建立这样的连接:

self.port = bluetooth.PORT_ANY
print "Accepting clients..."
self.server_sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
self.server_sock.bind(("",self.port))
self.server_sock.listen(5)
print "listening on port %d" % self.port

bluetooth.advertise_service( self.server_sock, MY_SERVICE, MY_UUID )

client_sock,address = self.server_sock.accept()
print "Accepted connection from ",address

commThread = ServerThread(client_sock, self.bn_id, self.bn_name, self.bn_thumbnail)

同样,此代码对于顺序连接也能正常工作,但是当我并行尝试时,我的客户端从服务器的蓝牙系统收到“忙”响应。在客户端,我输出尝试连接的端口,并且始终显示端口“1”。

PyBlueZ是否有仅允许单个连接的限制?还是我在这里为并行连接做错了什么?

最佳答案

我认为您的问题与代码的蓝牙客户端部分无关。
您正确显示了蓝牙服务器代码。您应该尝试更改的内容:

  • 仅播发一次服务,并且仅播发一次(无需为每个服务器线程播发服务)
  • 为每个线程分配一个不同的服务器 channel 。 (在RFCOMM连接上,通常有一个RFCOMM管理器,它为每个套接字分配一个新的服务器 channel 。我认为在您的情况下,您可能必须手动执行此操作。)更改此代码
    self.port = bluetooth.PORT_ANY
    

    尝试 channel 1、2,依此类推,看看是否有效!然后,您要做的就是跟踪分配的 channel 。

  • 请让我知道它是否有效!

    关于python - PyBlueZ : Create multiple client connections,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9710653/

    10-11 10:57