c++ Winsock 搜索蓝牙
void GetBluetooth()
{
CString strVal(L"");
CString strName(L"");
// 初始化winsock
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
{
strVal.Format(L"WSAStartup failed with error code: %d", WSAGetLastError());
SetTips(strVal);
return;
}
//初始化蓝牙枚举结构
DWORD dwWsaqsLen = sizeof(WSAQUERYSET);
LPWSAQUERYSET lpWsaqs = (LPWSAQUERYSET)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwWsaqsLen);
lpWsaqs->dwSize = sizeof(WSAQUERYSET);
lpWsaqs->dwNameSpace = NS_BTH;
//开始枚举蓝牙设备
DWORD dwWsaqsFlags = LUP_CONTAINERS | LUP_FLUSHCACHE | LUP_RETURN_NAME | LUP_RETURN_ADDR;
HANDLE hService;
if (WSALookupServiceBegin(lpWsaqs, dwWsaqsFlags, &hService) != SOCKET_ERROR)
{
BOOL bFinished = FALSE;
m_vBluetoothInfo.clear();
while (!bFinished)
{
BLUETOOTH_INFO btInfo;
if (WSALookupServiceNext(hService, dwWsaqsFlags, &dwWsaqsLen, lpWsaqs) == NO_ERROR)
{
SOCKADDR_BTH *saBth = (SOCKADDR_BTH*)lpWsaqs->lpcsaBuffer->RemoteAddr.lpSockaddr;
strName = lpWsaqs->lpszServiceInstanceName;
btInfo.btAddr = saBth->btAddr;
btInfo.strName = lpWsaqs->lpszServiceInstanceName;
m_vBluetoothInfo.push_back(btInfo);
SetTips(L"发现蓝牙设备");
strVal.Format(L"NAP:0x%04X SAP:0x%08X 设备名称:%s", GET_NAP(btInfo.btAddr), GET_SAP(btInfo.btAddr), lpWsaqs->lpszServiceInstanceName);
SetTips(strVal);
SetTips(L"------------\n");
}
else
{
// 错误处理
switch (WSAGetLastError())
{
// 所给缓冲区过小,重新申请
case WSAEFAULT:
HeapFree(GetProcessHeap(), 0, lpWsaqs);
lpWsaqs = (LPWSAQUERYSET)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwWsaqsLen);
break;
// 没有更多蓝牙设备了
case WSA_E_NO_MORE:
bFinished = true;
break;
default:
//bFinished = true;
break;
}
}
}
WSALookupServiceEnd(hService);
}
// 释放资源
HeapFree(GetProcessHeap(), 0, lpWsaqs);
WSACleanup();
}
更多推荐

所有评论(0)