Python PyBlueZ:创建多个客户端连接

Python PyBlueZ:创建多个客户端连接,python,multithreading,network-programming,bluetooth,Python,Multithreading,Network Programming,Bluetooth,我目前有一个针对PyBlueZ编码的客户机/服务器对。现在,服务器可以连接到顺序客户机-它将一直工作到与一个客户机完成连接,然后开始侦听另一个客户机 然而,我真正想要的是在不同的线程中运行客户端通信,这样我就可以同时拥有多个客户端。但是,当我尝试第二个客户端连接时,PyBlueZ会公布第一个客户端当前使用的相同端口。我正在建立这样的连接: self.port = bluetooth.PORT_ANY print "Accepting clients..." self.server_sock=bl

我目前有一个针对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中是否有只允许单个连接的限制?还是我在并行连接方面做错了什么?

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

  • 只发布一次服务,并且只发布一次(无需为每个服务器线程发布)
  • 为每个线程分配一个不同的服务器通道。(在RFCOMM连接上,通常有一个RFCOMM管理器为每个套接字分配一个新的服务器通道。我认为在您的情况下,您可能需要手动执行此操作。)更改此代码

    self.port = bluetooth.PORT_ANY
    
    尝试频道1、2等等,看看它是否有效!然后,您所要做的就是跟踪分配的频道

请让我知道它是否有效