TCP over Bluetooth(Windows 套接字)
Posted
技术标签:
【中文标题】TCP over Bluetooth(Windows 套接字)【英文标题】:TCP over Bluetooth (Windows Sockets) 【发布时间】:2017-01-20 13:58:06 【问题描述】:我需要一些有关 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 传输它。有人可以帮忙吗?
【问题讨论】:
【参考方案1】:RFCOMM 是一个模拟串口,它与 Internet 协议直接无关。您需要创建一个通过 RFCOMM 运行的传输,例如PPP 连接。在 Windows 上,您可以通过使用控制面板中的网络设置添加新连接来实现。本质上,PPP 将在一个空调制解调器上运行。您的应用程序可以以编程方式执行此操作,但这是一系列步骤。或者,如果您不想弄乱 Windows 网络堆栈设置,您可以将网络堆栈嵌入到您的应用程序中,并通过 RFCOMM 端口使用 PPP 直接说话。
【讨论】:
是的,我打算用 Windows 堆栈来做它并运行它的 rfcomm 但到目前为止我没有找到解决方案。但是,我从没想过从 Windows 控制面板创建 PPP。我会试一试 - 谢谢! @Lynguistic 这就是您应该使用蓝牙互联网连接的方式:您将它们视为始终连接的调制解调器,并像使用任何其他典型调制解调器一样连接:使用 PPP。以上是关于TCP over Bluetooth(Windows 套接字)的主要内容,如果未能解决你的问题,请参考以下文章
array语句、do over语句、attrib语句、window语句