【问题标题】:Why i get error using accept() method in pybluez?为什么我在 pybluez 中使用 accept() 方法会出错?
【发布时间】:2022-07-05 01:28:25
【问题描述】:
我想在树莓派和手机之间建立一个简单的连接,但每次我写 .accept() 时,我都会得到 [Errno 77] 文件描述符处于错误状态。代码如下:
import bluetooth
s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
port = 19
host = "MACADDR"
s.connect((host,port))
client, badr = s.accept()
【问题讨论】:
标签:
python
bluetooth
pybluez
【解决方案1】:
问题是您在给定的代码 sn-p 中混合了客户端和服务器逻辑。一旦connect() 被调用,套接字就会成为客户端,因此在此之后尝试调用accept() 确实会失败。只需删除 client, badr = s.accept() 即可使客户端工作。
以下是客户端实现的示例:
import bluetooth
def client(remote_addr: str, remote_port: int):
client_sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
print(f'Establishing connection to {remote_addr}:{remote_port}')
client_sock.connect((remote_addr, remote_port))
print('Connection established')
return client_sock
这是一个服务器端实现的示例:
import bluetooth
def server(local_addr: str, local_port: int):
server_sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
server_sock.bind((local_addr, local_port))
server_sock.listen(1)
print('Listening for connection on {local_addr}:{local_port}...')
client_sock, remote_addr = s.accept()
print(f'Device {remote_addr} connected')
return (server_sock, client_sock)
您可以在树莓派上运行server(),在手机上运行client(),反之亦然。