VC 蓝牙编程问题,纠结中

aisq 2014-01-25 03:31:51
想请问下关于VC下蓝牙编程的问题,现在我的问题是用win socket编程,总是连接不上,connect函数总是返回10049,说什么地址不正确,我是照着官网的例子做的,还是有问题,唉。

我想实现的功能是,利用win8平板上自带的蓝牙设备,和我的蓝牙板通信。

附上我的代码吧:

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();
}


现在的问题,总是connect时失败,我的环境是VC6.0 + Win xp sp3,装了个SDK是 Windows Server 2003 PSDK February 2003 Edition版本的。

有哪位大神做过windows下的蓝牙开发,给点思路吧。
...全文
967 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xing_shou 2015-10-14
  • 打赏
  • 举报
回复
据说VC版本要2005以上
赵4老师 2014-08-08
  • 打赏
  • 举报
回复
看看电脑键盘或面板或侧面有没有开关管蓝牙的.
Ailoverer 2014-08-08
  • 打赏
  • 举报
回复
你好,我想请问下你那个蓝牙解决了没有;我也遇到这个问题,一直连接不上,给了高分也没有人回答; 我现在是win8 pad开发 支持4.0;不知道是winsock API问题还是咋的 连接部上;只能发现设备 谢谢
阿先森 2014-02-26
  • 打赏
  • 举报
回复
看看这篇文章,或许对你有帮助。 http://www.cnblogs.com/EdmundDwyane/p/3292454.html
阿先森 2014-02-26
  • 打赏
  • 举报
回复
1.检查ServerGuid具体值是多少? 2.检查RemoteBthDevInfo.RemoteAddr具体值是多少? SOCKADDR_BTH sa; memset (&sa, 0, sizeof(sa)); sa.addressFamily = AF_BTH; // sa.serviceClassId = ServerGuid; // 这句慎重使用,要看目标蓝牙设备是否提供ServerClassId sa.port = nPort; // 改用这句通用性更强,nPort = {0, 31},表示蓝牙通道,共32个通道。0和31为系统保留,应用程序就别用了。一般的蓝牙设备至少一个通道,nPort = 1 即可。 sa.btAddr = RemoteBthDevInfo.RemoteAddr;
aisq 2014-02-18
  • 打赏
  • 举报
回复
万恶的windows,蓝牙居然搞得这么差

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧