2017-01-20 150 views
0

我需要一些Windows套接字编程的帮助。我想通过蓝牙使用TCP在android手机(客户端)和C++应用程序(服务器)之间进行通信。在服务器端,我使用Windows套接字。通过蓝牙TCP(Windows套接字)

我已经通过RFCOMM建立了两个实例之间的连接,但我想通过TCP/IP进行连接。有谁知道我可以在Windows下创建蓝牙套接字并通过它发送TCP消息?

非常感谢!

%***********更新*************%

最近,我试图通过Windows栈来实现它。连接已建立,但通信仍以rfcomm为基础。有谁知道我的错误或错误的想法是什么?

serverSocket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); 

// error checks 

SOCKADDR_BTH sa; 
memset (&sa, 0, sizeof(sa)); 
sa.addressFamily = AF_BTH; 
sa.port = 11 & 0xff; 
sa.serviceClassId = TCP_PROTOCOL_UUID; 
bind(serverSocket, (SOCKADDR*)&sa, sizeof(sa)); 
// error checks 

// Register Service 
WSAQUERYSET service1; 
memset(&service1, 0, sizeof(service1)); 
service1.dwSize = sizeof(service1); 
service1.lpszServiceInstanceName = _T("ViL Data..."); 
service1.lpszComment = _T("Pushing data to Android"); 

GUID serviceID1 = TCP_PROTOCOL_UUID; 

service1.lpServiceClassId = &serviceID1; 
service1.dwNumberOfCsAddrs = 1; 
service1.dwNameSpace = NS_BTH; 

CSADDR_INFO csAddr1; 
memset(&csAddr1, 0, sizeof(csAddr1)); 
csAddr1.LocalAddr.iSockaddrLength = sizeof(SOCKADDR_BTH); 
csAddr1.LocalAddr.lpSockaddr = (sockaddr*)&sa; 
csAddr1.iSocketType = SOCK_STREAM; 
csAddr1.iProtocol = IPPROTO_TCP; 
service1.lpcsaBuffer = &csAddr1; 

WSASetService(&service1, RNRSERVICE_REGISTER, 0) 
// error checkings 

这工作得很好,我可以从我的Android应用程序连接到服务器。但我仍然困惑它为什么不通过TCP传输它。谁能帮忙?

回答

0

RFCOMM是一个模拟串口,与Internet协议直接无关。您需要创建一个运行在RFCOMM上的传输,例如一个PPP连接。在Windows上,您可以通过使用控制面板中的网络设置添加新连接来完成此操作。本质上,PPP将通过空调制解调器运行。您的应用程序可以以编程方式执行,但是这是一系列完整的步骤。或者,如果您不想混淆Windows网络堆栈设置,则可以将网络堆栈嵌入您的应用程序,并通过RFCOMM端口直接使用PPP进行通话。

+0

是的我打算用Windows堆栈来运行它并运行rfcomm,但直到现在我还没有找到解决方案。但是,我从来没有想过从Windows控制面板创建PPP。我会试一试 - 谢谢! – Lynguistic

+0

@Lynguistic这就是你应该如何使用蓝牙互联网连接:你把它们当作一个始终连接着的调制解调器,并像其他任何典型调制解调器一样连接:使用PPP。 –