gpt4 book ai didi

c++ - 蓝牙服务问题

转载 作者:行者123 更新时间:2023-11-28 08:29:29 25 4
gpt4 key购买 nike

我需要创建一个自定义蓝牙服务,我必须使用 C++ 开发它。我阅读了很多示例,但未能成功发布具有自定义 UUID 的新服务。我需要指定一个 UUID,以便能够从 Android 应用程序连接到该服务。这是我写的:

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;

当我打印使用 get getsockname 检索到的 SOCKADDR_BTH 结构时,我得到一个不是我的 UUID。此外,如果我使用从 getsockname 读取的 UUID 连接 Android 应用程序,连接将失败并出现以下异常:

java.io.IOException: Service discovery failed

你能帮帮我吗??

谢谢!

最佳答案

在绑定(bind)和等待连接之前,您必须创建 SDP 记录并使用 WSASetService 发布它。关注this tutorial ,您将能够接收连接。

关于c++ - 蓝牙服务问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2795528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com