蓝牙和连接
蓝牙会使用 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 |
即插即用、驱动程序堆栈事件或其他错误导致故障。 |