蓝牙TCP(Windows套接字)

蓝牙TCP(Windows套接字),windows,network-programming,communication,Windows,Network Programming,Communication,我需要一些关于windows套接字编程的帮助。我想通过蓝牙技术在Android手机(客户端)和C++应用程序(服务器)之间进行通信。在服务器端,我使用windows套接字 我已经通过RFCOMM在两个实例之间建立了连接,但我想通过TCP/IP实现连接。有人知道我如何在windows下创建蓝牙套接字并通过它发送TCP消息吗 非常感谢 %***********更新***********% 最近,我尝试通过windows堆栈实现它。连接已建立,但模具通信仍基于rfcomm。有人知道我的错误或错误想法在

我需要一些关于windows套接字编程的帮助。我想通过蓝牙技术在Android手机(客户端)和C++应用程序(服务器)之间进行通信。在服务器端,我使用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传输。有人能帮忙吗?

RFCOMM是一个模拟的串行端口,它与Internet协议没有直接关系。您需要创建一个通过RFCOMM运行的传输,例如PPP连接。在Windows上,您可以使用控制面板中的网络设置添加新连接。基本上,PPP将在空调制解调器上运行。您的应用程序可以通过编程来完成,但这需要一系列步骤。或者,如果您不想干扰Windows网络堆栈设置,可以将网络堆栈嵌入到应用程序中,让它通过RFCOMM端口使用PPP直接说话。

是的,我打算使用Windows堆栈并运行RFCOMM,但到目前为止,我还没有找到解决方案。但是,我从未想过从windows控制面板创建PPP。我试试看——谢谢@Lynguistic这就是你应该如何使用蓝牙互联网连接:你把它们当作一个始终连接的调制解调器来对待,并像对待任何其他典型调制解调器一样连接:使用PPP。