2012-03-14 135 views
4

我目前有一个客户端/服务器对编码对PyBlueZ。现在服务器可以连接到顺序客户端 - 它将一直工作到客户端完成,然后它将开始监听另一个客户端。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是否有限制,只允许单个连接?还是我在这里做错了并行连接?

回答

1

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

  • 只公告服务一次,并且只有一次(无需做广告为每个服务器线程)
  • 分配不同的服务器信道为每个线程。(在RFCOMM连接,通常有一个RFCOMM管理器,它分配给每个每个插座一个新的服务器渠道。我觉得你的情况,你可能需要手动做到这一点。)更改此代码

    self.port = bluetooth.PORT_ANY 
    

    尝试渠道1, 2等等,看看它是否工作!那么你所要做的就是跟踪分配的频道。

请让我知道它是否工作!

+0

@Matt - 这项工作? – rosshamish 2014-09-23 17:46:30