PyBlueZ:创建多个客户端连接

时间:2012-03-14 21:37:05

标签: python multithreading network-programming bluetooth

我目前有一个针对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 个答案:

答案 0 :(得分:1)

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

  • 仅宣传服务一次,仅发布一次(不需要为每个服务器线程做广告)
  • 为每个线程分配不同的服务器通道。(在RFCOMM连接上,通常有一个RFCOMM管理器,它为每个插槽分配一个新的服务器通道。我认为在你的情况下你可能会必须手动完成。)更改此代码

    self.port = bluetooth.PORT_ANY
    

    尝试通道1,2等,看它是否有效!然后你所要做的就是跟踪分配的频道。

请告诉我它是否有效!