为什么我得到错误使用接受()方法在pybluez?



我想在树莓和手机之间建立一个简单的连接,但每次我写。accept()时,我得到[Errno 77]文件描述符处于坏状态。下面是代码:

import bluetooth
s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
port = 19
host = "MACADDR"
s.connect((host,port))
client, badr = s.accept()

问题是您在给定的代码片段中混淆了客户机和服务器逻辑。一旦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 = server_sock.accept()
print(f'Device {remote_addr} connected')
return (server_sock, client_sock)

您可以在树莓上运行server(),在手机上运行client(),反之亦然。

相关内容

最新更新