【问题标题】:PyBlueZ: Create multiple client connectionsPyBlueZ:创建多个客户端连接
【发布时间】:2012-03-31 10:12:18
【问题描述】:

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

【问题讨论】:

    标签: python multithreading network-programming bluetooth


    【解决方案1】:

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

    • 只发布一次服务,并且只发布一次(无需为每个服务器线程发布广告)
    • 为每个线程分配不同的服务器通道。(在 RFCOMM 连接上,通常有一个 RFCOMM 管理器为每个套接字分配一个新的服务器通道。我认为在你的情况下你可能必须这样做手动。)更改此代码

      self.port = bluetooth.PORT_ANY
      

      尝试通道 1、2 等,看看是否有效!那么您所要做的就是跟踪分配的频道。

    如果成功请告诉我!

    【讨论】:

      猜你喜欢
      • 2015-11-30
      • 2013-04-26
      • 2021-06-28
      • 1970-01-01
      • 2019-02-28
      • 2016-04-17
      • 2018-03-26
      • 2015-10-27
      • 1970-01-01
      相关资源
      最近更新 更多