【问题标题】: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(),反之亦然。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2010-10-18
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    相关资源
    最近更新 更多