2017-01-20 152 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。 –