环境:
windows xp SP3 + vs2005 + 用Windows BlueTooth SDK
用WSASetService发布服务: WSAQUERYSET service;
memset(&service, 0, sizeof(service));
service.dwSize = sizeof(WSAQUERYSET);
GUID serviceID = OBEXObjectPushServiceClass_UUID;
service.lpServiceClassId = &serviceID;
service.dwNameSpace = NS_BTH;
service.dwNumberOfCsAddrs = 1;
service.lpszServiceInstanceName = L"OBEXObjectPush"; CSADDR_INFO csAddr;
memset(&csAddr, 0, sizeof(CSADDR_INFO));
csAddr.LocalAddr.iSockaddrLength = sizeof(SOCKADDR_BTH);
csAddr.LocalAddr.lpSockaddr = pAddr;
csAddr.iSocketType = SOCK_STREAM;
csAddr.iProtocol = BTHPROTO_RFCOMM;
service.lpcsaBuffer = &csAddr; int iRtn = WSASetService(&service, RNRSERVICE_REGISTER, 0);
if (0 != iRtn)
{
return GetLastError();
}
return 0;发布成功。用我另外一个蓝牙查看服务,确实能搜索到服务。
1、第一种情况:在手机里面,先搜索并配对,然后选取一个文件,然后点击通过蓝牙发送,选择已经有的蓝牙,发送没有问题。
2、第二种情况:如果不先配对,直接先选取一个文件,然后点击通过蓝牙发送,点搜索,就搜索不到设备。如果用系统自带的那个工具,点击“接收文件”,第二种情况也能被搜索到。
这是什么问题?还有一种发布方式:使用SDP Record,可是在网上找了很多,WSASetService都是10022错误。哪位知道要怎么样使用
SDPRecord发布服务?
windows xp SP3 + vs2005 + 用Windows BlueTooth SDK
用WSASetService发布服务: WSAQUERYSET service;
memset(&service, 0, sizeof(service));
service.dwSize = sizeof(WSAQUERYSET);
GUID serviceID = OBEXObjectPushServiceClass_UUID;
service.lpServiceClassId = &serviceID;
service.dwNameSpace = NS_BTH;
service.dwNumberOfCsAddrs = 1;
service.lpszServiceInstanceName = L"OBEXObjectPush"; CSADDR_INFO csAddr;
memset(&csAddr, 0, sizeof(CSADDR_INFO));
csAddr.LocalAddr.iSockaddrLength = sizeof(SOCKADDR_BTH);
csAddr.LocalAddr.lpSockaddr = pAddr;
csAddr.iSocketType = SOCK_STREAM;
csAddr.iProtocol = BTHPROTO_RFCOMM;
service.lpcsaBuffer = &csAddr; int iRtn = WSASetService(&service, RNRSERVICE_REGISTER, 0);
if (0 != iRtn)
{
return GetLastError();
}
return 0;发布成功。用我另外一个蓝牙查看服务,确实能搜索到服务。
1、第一种情况:在手机里面,先搜索并配对,然后选取一个文件,然后点击通过蓝牙发送,选择已经有的蓝牙,发送没有问题。
2、第二种情况:如果不先配对,直接先选取一个文件,然后点击通过蓝牙发送,点搜索,就搜索不到设备。如果用系统自带的那个工具,点击“接收文件”,第二种情况也能被搜索到。
这是什么问题?还有一种发布方式:使用SDP Record,可是在网上找了很多,WSASetService都是10022错误。哪位知道要怎么样使用
SDPRecord发布服务?
解决方案 »
- 选择保存路径如何实现?
- 多线程的白痴问题
- fatal error LNK1112,Visual C++ 2008 Express Edition 进行编译,为什么链接的时候,module machine type 一直会变
- vc 类中如何使用map模板的
- CFileFind类应用问题,附代码!!!
- 窗口变量的传递问题.在线等待解答...
- 谁第一个回答好, 200 分全给他一个人.
- 急死我了!!!我该怎么办!!!!我愿用尽所有分求解!!!!
- 如何将LISTBOX分隔,在哪里分隔?
- 为什么listcontrl.GetItem()返回零值
- 求学
- MFC文件读取的问题(文件中有英文,正文,希腊字母等)
既然第一种情况已经OK,那说明服务已经注册成功了。建议换个机型的手机试试第二种情况,有可能是手机的问题.2) SDP 的方式和现在采用的并没有本质的区别. 你可以试试下面的代码, 这个SDP不一定适合你的BT设备...//SDP record generated by bthnscreate.exe
BYTE grgbSdpRecord[] = {
0x35, 0x4d, 0x09, 0x00, 0x01, 0x35, 0x11, 0x1c,
0x29, 0xf9, 0xc0, 0xfd, 0xbb, 0x6e, 0x47, 0x97,
0x9f, 0xa9, 0x3e, 0xc9, 0xa8, 0x54, 0x29, 0x0c,
0x09, 0x00, 0x04, 0x35, 0x0c, 0x35, 0x03, 0x19,
0x01, 0x00, 0x35, 0x05, 0x19, 0x00, 0x03, 0x08,
0x1a, 0x09, 0x00, 0x06, 0x35, 0x09, 0x09, 0x65,
0x6e, 0x09, 0x00, 0x6a, 0x09, 0x01, 0x00, 0x09,
0x00, 0x09, 0x35, 0x08, 0x35, 0x06, 0x19, 0x11,
0x05, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x25,
0x06, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c
};
//SDP record size constant returned by bthnscreate.exe
#define SDP_RECORD_SIZE 0x0000004f
#define SDP_CHANNEL_OFFSET 40
ULONG recordHandle = 0;
SOCKADDR_BTH sa;
memset (&sa, 0, sizeof(sa));
int nSize; nSize = sizeof(sa);
if (getsockname(m_hSocket, (SOCKADDR *)&sa, &nSize) == SOCKET_ERROR)
return WSAGetLastError(); struct bigBlob
{
BTHNS_SETBLOB b;
}*pBigBlob; pBigBlob = (bigBlob *)malloc(sizeof(struct bigBlob)+ SDP_RECORD_SIZE );
ULONG ulSdpVersion = BTH_SDP_VERSION;
pBigBlob->b.pRecordHandle = &recordHandle;
pBigBlob->b.pSdpVersion = &ulSdpVersion;
pBigBlob->b.fSecurity = 0;
pBigBlob->b.fOptions = 0;
pBigBlob->b.ulRecordLength = SDP_RECORD_SIZE; memcpy (pBigBlob->b.pRecord, grgbSdpRecord, SDP_RECORD_SIZE);
pBigBlob->b.pRecord[SDP_CHANNEL_OFFSET] = (unsigned char)sa.port;
BLOB blob;
blob.cbSize = sizeof(BTHNS_SETBLOB) + SDP_RECORD_SIZE - 1;
blob.pBlobData = (PBYTE) pBigBlob; WSAQUERYSET Service;
memset (&Service, 0, sizeof(Service));
Service.dwSize = sizeof(Service);
Service.lpBlob = &blob;
Service.dwNameSpace = NS_BTH;
if (WSASetService(&Service, RNRSERVICE_REGISTER, 0) == SOCKET_ERROR)
{
free(pBigBlob);
return WSAGetLastError();
}
free(pBigBlob);
return 0;
http://msdn.microsoft.com/en-us/library/aa450195.aspxxp下不清楚...