我为wince 4.2设备写了一个蓝牙客户端程序。设备发现工作正常。但是,当我尝试连接到PC时,connect函数会立即返回错误代码10053
。 PC正在处理连接请求,提示输入验证码但wince设备似乎没有等待。
可能导致此问题的原因是什么?我使用以下步骤(为简单起见,删除了错误处理):
WSAStartup(..)…////was successful.
SOCKET m_Socket =Socket (AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); //was successful.
SOCKADDR_BTH sClinet;
memset (&sClinet, 0, sizeof(sClinet));
sClinet.addressFamily = AF_BTH;
sClinet.btAddr = btd.btaddr; ; //BT_ADDR of the PC obtained via Device Discovery..
sClinet.port = BT_PORT_ANY; //I did try 0, did not help!
sClinet.serviceClassId = RFCOMM_PROTOCOL_UUID;
int nConErr = connect (m_Socket, (SOCKADDR *)&sClinet, sizeof(sClinet));
nConErr
立即返回10053
。它甚至没有等待,即使PC识别出连接并提示输入PIN进行身份验证的消息。
答案 0 :(得分:0)
根据您的描述,它看起来像配对/身份验证问题。您还应该考虑使用setsockopt
函数:http://msdn.microsoft.com/en-us/library/ms863347.aspx
您应该尝试使用SO_BTH_AUTHENTICATE
选项,根据MSDN:
在连接的套接字上,触发身份验证。在未连接的套接字上,强制连接身份验证。对于传入连接,这意味着如果无法执行身份验证,则会拒绝连接。
因此,在调用connect
函数之前,您应该为套接字设置选项。