3,881
社区成员
发帖
与我相关
我的任务
分享
int wmain()
{
WSADATA wsaData;
/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
if(0 != WSAStartup(MAKEWORD(2, 2), &wsaData))
{
//使用Winsock DLL
printf("Initialize socket dll failed.\n");
return FALSE;
}
//确认持WinSock DLL是否支 2.2版本
if(2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion))
{
printf("Socket version not supported.\n");
}
else
{
printf("The Winsock 2.2 dll was found okay\n");
WSAQUERYSET querySet;
HANDLE hLookup;
DWORD flags = LUP_RETURN_NAME | LUP_RETURN_ADDR;
union
{
CHAR buf[5000];
double __unused; // ensure proper alignment
};
LPWSAQUERYSET pwsaResults = (LPWSAQUERYSET) buf;
DWORD dwSize = sizeof(buf);
BOOL bHaveName;
ZeroMemory(&querySet, sizeof(querySet));
querySet.dwSize = sizeof(querySet);
querySet.dwNameSpace = NS_BTH;
if (ERROR_SUCCESS != WSALookupServiceBegin (&querySet, LUP_CONTAINERS, &hLookup))
{
return (-1);
}
ZeroMemory(pwsaResults, sizeof(WSAQUERYSET));
pwsaResults->dwSize = sizeof(WSAQUERYSET);
pwsaResults->dwNameSpace = NS_BTH;
pwsaResults->lpBlob = NULL;
BOOL bError = FALSE;
while ( TRUE )
{
if ( ERROR_SUCCESS == WSALookupServiceNext (hLookup, flags, &dwSize, pwsaResults) )
{
//ASSERT (pwsaResults->dwNumberOfCsAddrs == 1);
BTH_ADDR b = ((SOCKADDR_BTH *)pwsaResults->lpcsaBuffer->RemoteAddr.lpSockaddr)->btAddr;
bHaveName = pwsaResults->lpszServiceInstanceName && *(pwsaResults->lpszServiceInstanceName);
t_RemoteBthDevInfo RemoteBthDevInfo;
if ( bHaveName )
{
//printf("divice: %s", pwsaResults->lpszServiceInstanceName);
}
printf("divice: %s", pwsaResults->lpszServiceInstanceName);
RemoteBthDevInfo.RemoteAddr = b;
CSADDR_INFO* pCSAddr = (CSADDR_INFO *)pwsaResults->lpcsaBuffer;
RemoteBthDevInfo.LocalAddr = ((SOCKADDR_BTH *)pCSAddr->LocalAddr.lpSockaddr)->btAddr;
GUID ServerGuid = g_guidServiceClass;
SOCKET m_socketClient;
m_socketClient = socket (AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
if (m_socketClient == INVALID_SOCKET)
{
return WSAGetLastError();
}
else
{
printf("=CRITICAL= | socket() call failed. WSAGetLastError = [%d]\n", WSAGetLastError());
}
printf("*INFO* | socket() call succeeded. Socket = [0x%X]\n", m_socketClient);
printf("*INFO* | connect() attempt with Remote BTHAddr = [0x%X]\n", RemoteBthDevInfo.RemoteAddr);
SOCKADDR_BTH sa;
memset (&sa, 0, sizeof(sa));
sa.addressFamily = AF_BTH;
sa.serviceClassId = ServerGuid;
sa.btAddr = RemoteBthDevInfo.RemoteAddr;
if (connect (m_socketClient, (SOCKADDR *)&sa, sizeof(sa)) == SOCKET_ERROR)
{
m_socketClient = INVALID_SOCKET;
printf("connect failed: %d", WSAGetLastError());
return WSAGetLastError();
}
else
{
printf("connect success!");
}
//TRACE (L"%s ( %04x%08x )\n", RemoteBthDevInfo.szName, GET_NAP(b), GET_SAP(b) );
//Add_RemoteBthDevInfo ( RemoteBthDevInfo );
}
else
{
if ( WSAGetLastError() != WSA_E_NO_MORE )
{
bError = TRUE;
printf("Lookup bluetooth device failed: %d", WSAGetLastError());
}
break;
}
}
WSALookupServiceEnd(hLookup);
}
//Winsock dll使用完后,清理并退出
WSACleanup();
}