蓝牙和连接

蓝牙会使用 connect 函数,通过事先创建的蓝牙套接字来连接目标蓝牙设备。 connect 函数的 name 参数是一个 SOCKADDR_BTH 结构,必须指定目标蓝牙设备。 有两种机制可用于标识目标设备:

  • SOCKADDR_BTH 结构可以直接指定请求连接的端口号。 这种机制要求应用程序在尝试 connect 操作之前执行自己的 SDP 查询。
  • SOCKADDR_BTH 结构可以指定要连接的服务的唯一服务类 ID。 如果对等设备有多个端口与服务类 ID 相对应,则 connect 功能调用会连接到第一个有效服务。 这种机制无需事先进行 SDP 查询即可使用。

在将 SOCKADDR_BTH 结构与 connect 函数配合使用时,需要满足以下要求:

  • btAddr 成员必须是有效的远程无线电地址。
  • 对于 serviceClassId 成员,如果端口成员为零,则系统会尝试使用 serviceClassId 来解析服务对应的远程端口。 服务类是由蓝牙规范定义的规范化 128 位 GUID。 常见 GUID 由蓝牙分配号码文档定义。 另外,也可为特定域应用程序使用唯一的 GUID。
  • port 成员必须是有效的远程端口,如果指定了 serviceClassId 成员,则其必须为零。

下表列出了蓝牙和 connect 函数的结果代码。

Error/error# 说明
WSAEISCONN10056
调用了已连接套接字的 connect 函数。
WSAEACCES10013
连接应用程序请求身份验证,但身份验证失败。
WSAENOBUFS10055
无法恢复的内存不足错误。
WSAEADDRINUSE10048
请求的端口/通道号正在使用中。
WSAETIMEDOUT10060
蓝牙无线电级别 I/O 超时 (PAGE_TIMEOUT)。
WSAEDISCON10101
远程对等设备断开 RFCOMM 通道连接。
WSAECONNRESET10054
RFCOMM 多路复用器(会话)被远程对等设备断开。
WSAECONNABORTED10053
按应用程序关闭套接字。
WSAENETUNREACH10051
除 L2CAP 或蓝牙无线电级超时以外的错误。
WSAEHOSTDOWN10064
RFCOMM 收到 DM 响应。
WSAENETDOWN10050
意外网络错误。
WSAESHUTDOWN10058
远程对等设备断开了 L2CAP 通道连接。
WSAEADDRNOTAVAIL10049
蓝牙端口/通道或设备地址无效。
WSAEINVAL10022
即插即用、驱动程序堆栈事件或其他错误导致故障。

Windows 套接字

connect

SOCKADDR_BTH