簡體   English   中英

藍牙上的 TCP(Windows 套接字)

[英]TCP over Bluetooth (Windows Sockets)

我需要一些有關 Windows 套接字編程的幫助。 我想通過藍牙通過 TCP 在 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 直接說話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM