Мне нужно создать пользовательский сервис bluetooth, и мне нужно его разработать с помощью C++. Я прочитал много примеров, но мне не удалось опубликовать новую службу с пользовательским UUID. Мне нужно указать UUID, чтобы иметь возможность подключиться к службе из приложения Android. Это то, что я писал:Проблема с обслуживанием Bluetooth
GUID service_UUID = { /* 00000003-0000-1000-8000-00805F9B34FB */
0x00000003,
0x0000,
0x1000,
{0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB}
};
SOCKET s, s2;
SOCKADDR_BTH sab
if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
return 1;
printf("installing a new service\n");
s = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
if (s == INVALID_SOCKET)
{
printf ("Socket creation failed, error %d\n", WSAGetLastError());
return 1;
}
memset (&sab, 0, sizeof(sab));
sab.addressFamily = AF_BTH;
sab.port = BT_PORT_ANY;
sab.serviceClassId = service_UUID;
if (0 != bind(s, (SOCKADDR *) &sab, sizeof(sab)))
{
printf ("bind() failed with error code %d\n", WSAGetLastError());
closesocket (s);
return 1;
}
int result=sizeof(sab);
getsockname(s,(SOCKADDR *) &sab, &result);
printSOCKADDR_BTH(sab);
if(listen (s, 5) == 0)
printf("listen() is OK! Listening for connection... :)\n");
else
printf("listen() failed with error code %d\n", WSAGetLastError());
printf("waiting connection");
for (; ;)
{
int ilen = sizeof(sab2);
s2 = accept (s, (SOCKADDR *)&sab2, &ilen);
printf ("accepted");
}
if(closesocket(s) == 0)
printf("closesocket() pretty fine!\n");
if(WSACleanup() == 0)
printf("WSACleanup() is OK!\n");
return 0;
Когда я распечатать структуру SOCKADDR_BTH извлеченного с ПОЛУЧИТЬ getsockname я получить UUID, который не является моим. Кроме того, если я использовать UUID чтение из getsockname для подключения Android приложение не удается установить соединение с этим исключением:
java.io.IOException: Service discovery failed
Не могли бы вы мне помочь ??
Спасибо!
Hi..yes..i видел этот учебник, но (QUOTE): «Формат опубликованной SDP-информации настолько сложный, что Windows CE предоставляет специальный COM-контроль для построения и деконструирования записей SDP ... В качестве ярлыка многие Приложения Bluetooth составляют общую запись, либо вручную собирающую запись, либо используя пример инструмента BthNsCreate (доступный в SDK Windows CE), который предоставляется в Platform Builder. " Я уже спросил о BthNsCreate http://stackoverflow.com/questions/2763966/how-to-get-an-sdp-record-for-bluetooth-service Любые предложения? – hara
Вы используете BT_PORT_ANY в структуре, поэтому, по-моему, у вас UUID отличается от вашего. – rogerzanoni
Документация структуры SOCKADDR_BTH говорит, что serviceClassId игнорируется, если вы используете bind. В моем приложении (сервере) я установил канал (параметр порта) равным 0, а последний байт SDP - 0; На смещении 8 записи у вас есть UUID вашей службы и последний байт, канал. Публикация записи, UUID и канала привязаны, и вы можете искать канал на клиенте, используя свой UUID. В клиентском приложении я не устанавливаю канал, только UUID службы, а клиент делает поиск SDP для поиска канала. – rogerzanoni