加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – PyBlueZ:创建多个客户端连接

发布时间:2020-12-20 13:27:01 所属栏目:Python 来源:网络整理
导读:我目前有一个针对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中是否有限制,只允许单个连接?或者我在这里为并行连接做错了什么?

解决方法

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

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

self.port = bluetooth.PORT_ANY

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

如果有效,请告诉我!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读