netværk programmering - TCP over Bluetooth (Windows Sockets)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har brug for hjælp til Windows-sokkelprogrammeringen. Jeg vil gerne kommunikere mellem en android-telefon (klient) og en c ++-applikation (server) med TCP over Bluetooth. På server-side bruger jeg Windows-stikkontakter.


Jeg har allerede etableret en forbindelse mellem begge instanser via RFCOMM, men jeg vil gøre det over TCP/IP. Er der nogen der ved, hvordan jeg kan oprette en Bluetooth-stikkontakt under vinduer og sende TCP-meddelelser over det?


Mange tak!


\% *********** Opdater *************\%


For nylig forsøgte jeg at gennemføre det via Windows-stakken. Forbindelsen er etableret, men dø kommunikation er stadig rfcomm baseret. Ved der nogen, hvor min fejl eller falsk tænkning er?


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


Dette virker fint, og jeg kan oprette forbindelse til serveren fra min Android-app. Men jeg er stadig forvirret, hvorfor den ikke sender den over TCP. Kan nogen hjælpe?

Bedste reference


RFCOMM er en emuleret seriel port, den har intet at gøre med internetprotokoller direkte. Du skal oprette en transport, der kører over RFCOMM, f.eks. En PPP-forbindelse. I Windows gør du det ved at tilføje en ny forbindelse ved hjælp af netværksindstillingerne fra kontrolpanelet. PPP'en ville i det væsentlige køre over et nullmodem. Din ansøgning kan gøre det programmatisk til, men det er en hel række trin. Eller hvis du ikke vil rive med Windows-netværksstabler, kan du integrere en netværksstabel i din ansøgning og få det til at tale direkte ved hjælp af PPP via RFCOMM porten.