BOOL CBTAsyncSocket::SetPIN(int nIndex, char* szPIN)
{
LPDEVICEINFO_DATA RomteDeviceInfo = m_arrDiscovers.GetAt(nIndex);
BTH_SOCKOPT_SECURITY bth_sockopt; memset(&bth_sockopt, 0, sizeof(bth_sockopt));
bth_sockopt.iLength = strlen(szPIN);
bth_sockopt.btAddr = RomteDeviceInfo->Address;//改为0也是一样 char szBuf[32] ;
memset(szBuf, 0, sizeof(szBuf));
strcpy(szBuf, szPIN);
memcpy(bth_sockopt.caData,szBuf,strlen(szBuf)+1); if(setsockopt(m_hSocket, SOL_RFCOMM, SO_BTH_SET_PIN, (char *)&bth_sockopt, sizeof(BTH_SOCKOPT_SECURITY)) == SOCKET_ERROR )
{
int nError = WSAGetLastError();
TRACE(L"%d", nError);//返回的是10038
return FALSE;
}
return TRUE;
}
想去建立有密钥的连接,这样错在哪?返回的是10038还是要用另一参数SO_BTH_SET_LINK呢?
{
LPDEVICEINFO_DATA RomteDeviceInfo = m_arrDiscovers.GetAt(nIndex);
BTH_SOCKOPT_SECURITY bth_sockopt; memset(&bth_sockopt, 0, sizeof(bth_sockopt));
bth_sockopt.iLength = strlen(szPIN);
bth_sockopt.btAddr = RomteDeviceInfo->Address;//改为0也是一样 char szBuf[32] ;
memset(szBuf, 0, sizeof(szBuf));
strcpy(szBuf, szPIN);
memcpy(bth_sockopt.caData,szBuf,strlen(szBuf)+1); if(setsockopt(m_hSocket, SOL_RFCOMM, SO_BTH_SET_PIN, (char *)&bth_sockopt, sizeof(BTH_SOCKOPT_SECURITY)) == SOCKET_ERROR )
{
int nError = WSAGetLastError();
TRACE(L"%d", nError);//返回的是10038
return FALSE;
}
return TRUE;
}
想去建立有密钥的连接,这样错在哪?返回的是10038还是要用另一参数SO_BTH_SET_LINK呢?
Socket operation on nonsocket. m_hSocket 是否已经 socket(), bind() 了?
你应该使用这样的方式
bth_sockopt.iLength = strlen(szBuf);
memcpy(bth_sockopt.caData,szBuf,bth_sockopt.iLength);
if(setsockopt(m_hSocket, SOL_RFCOMM, SO_BTH_SET_PIN, (char *)&bth_sockopt, sizeof(BTH_SOCKOPT_SECURITY)) == SOCKET_ERROR )