我有一个蓝牙地址(7 C9 EBD 4CBFB 2),我需要使用winsock连接到它。这是我的代码,它返回错误-1,并且不会连接到我的设备。我如何格式化这个地址以用作btaddr?谢谢。下面是我的代码:
#include <winsock2.h>
#include <ws2bth.h>
#pragma comment(lib, "Ws2_32.lib")
#include <Windows.h>
#include <iostream>
using namespace std;
SOCKADDR_BTH sockAddr;
SOCKET btSocket;
int error;
int main() {
btSocket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
memset(&sockAddr, 0, sizeof(sockAddr));
sockAddr.addressFamily = AF_BTH;
sockAddr.serviceClassId = RFCOMM_PROTOCOL_UUID;
sockAddr.port = BT_PORT_ANY;
sockAddr.btAddr = 0x7C9EBD4CBFB2;
error = connect(btSocket, (SOCKADDR*)&sockAddr, sizeof(sockAddr));
cout << error;
}
1条答案
按热度按时间kwvwclae1#
您没有在
socket()
之前调用WSAStartup()
。如果您做了更好的错误检查,您会更快地意识到这一点。请参阅Handling Winsock Errors。socket()
将返回INVALID_SOCKET
(-1),然后WSAGetLastError()
将返回WSANOTINITIALISED
(10093)。尚未执行成功的
WSAStartup
。应用程序尚未调用
WSAStartup
或WSAStartup
失败。应用程序可能正在访问当前活动任务不拥有的套接字(即,试图在任务之间共享套接字),或调用WSACleanup
的次数太多。然后
connect()
将失败,返回值为SOCKET_ERROR
(-1),并且WSAGetLastError()
将返回WSAENOTSOCK
(10038)。非套接字上的套接字操作。
试图在不是套接字的对象上执行操作。套接字句柄参数未引用有效的套接字,或者对于
select
,fd_set
的成员无效。根据Bluetooth Programming with Windows Sockets文档:
与所有Windows套接字应用程序编程一样,必须调用WSAStartup函数才能启动Windows套接字功能并启用蓝牙。
始终检查系统调用的错误代码!
试试这样的方法: