python - 带有 Python 3.3 的蓝牙服务器

标签 python python-3.x bluetooth

Python 3.3 原生支持蓝牙套接字。不幸的是,它还没有得到很好的记录(在 documentation 中只提到了一次)。

用谷歌搜索有 a blog post关于实现客户端,但我找不到任何关于创建服务器的信息。

更具体地说,如何设置用户友好的名称和宣传服务。

所以,像

import socket

serverSocket = socket.socket(socket.AF_BLUETOOTH,
                             socket.SOCK_STREAM,
                             socket.BTPROTO_RFCOMM)
serverSocket.setTimeout(1)
serverSocket.bind(("", 1))
serverSocket.listen(1)

something.advertise_service(something something)

有什么想法吗?

最佳答案

坏消息: Python 似乎不支持您开箱即用的操作。 (至少不在 socketmodule.c 中)。

我见过的大多数 python/蓝牙用户都使用 pybluez尽管它自 2009 年以来就没有更新过。

好消息: 我浏览了他们的源代码(用于 Linux 连接),并找到了广告服务的相关部分。大部分代码基本上是从 socketmodule.c 的 python 2.2 版本复制粘贴而来。

pybluez 确实为 socket 对象定义了一些附加功能以实现所有这些蓝牙功能。它不会变得太低级,而是取决于 BlueZ为了那个原因。据我所知,它基本上采用 python 对象并创建 BlueZ 所需的数据结构,然后调用它。 如果您不想/不能使用 pybluez,您将不得不以某种方式实现这个缺失的功能。我想你可以用 c 类型来做到这一点。广告服务的相关部分在btmodule.c ,第 2562-2642 行。

pybluez 的源代码中有一个 python-3 分支,虽然我不知道它是否有效。

如果你决定使用 pybluez,一个例子来自 their source

server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)

port = server_sock.getsockname()[1]

uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"

advertise_service(server_sock, "SampleServer",
                  service_id = uuid,
                  service_classes = [ uuid, SERIAL_PORT_CLASS ],
                  profiles = [ SERIAL_PORT_PROFILE ], 
                  )

由于google code即将关闭,代码也可以在github上找到here .

关于python - 带有 Python 3.3 的蓝牙服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15828916/

相关文章:

python - 从带有列表的列表中获取最大值?

python - 通过 ssh 可以替代 "python3 sample_program.py &"的方法是什么?

python - 具有两个 "synchronized"变量的类的最短示例

python - 为什么这个函数只正确运行一次,然后返回一个空列表?

bluetooth - 增哥BLE灯泡协议(protocol)

iphone - iOS Bluetooth LE peripheralManager didReceiveWriteRequests 的例子在哪里

python - 如何将 pymssql 死锁捕获为异常?

python - Django MySql - 结合only()和distinct()

python - 全局变量与局部变量的性能

android - 进度条显示背景