gpt4 book ai didi

c++ - 通过蓝牙代码示例 C++ 将文件从 PC 传输到其他设备

转载 作者:太空狗 更新时间:2023-10-29 20:47:23 25 4
gpt4 key购买 nike

<分区>

嗨,Stackoverflow 用户!!!

问题:

  1. 我正在寻找一些代码示例,这些示例说明如何找到连接到我的计算机的蓝牙设备。
  2. 我正在寻找一些代码示例来说明如何将信息从我的计算机传输到移动设备。

现在我正在尝试在 C++ 上开发应用程序,它必须与 Bluetooth 一起工作设备。当我通过互联网进行研究时,我找到了一些关于蓝牙的信息,并找到了一些代码示例,这些示例展示了如何使用蓝牙设备。例如,here我找到了指示如何在所有蓝牙 radio 范围内找到所有蓝牙设备的代码:

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <bthdef.h>
#include <BluetoothAPIs.h>

#pragma comment(lib, "Irprops.lib")

// The BLUETOOTH_FIND_RADIO_PARAMS structure facilitates
// enumerating installed Bluetooth radios.
BLUETOOTH_FIND_RADIO_PARAMS m_bt_find_radio = {
sizeof(BLUETOOTH_FIND_RADIO_PARAMS)
};

// The BLUETOOTH_RADIO_INFO structure contains information
// about a Bluetooth radio.
BLUETOOTH_RADIO_INFO m_bt_info = {
sizeof(BLUETOOTH_RADIO_INFO),
0,
};

// The BLUETOOTH_DEVICE_SEARCH_PARAMS structure specifies
// search criteria for Bluetooth device searches.
BLUETOOTH_DEVICE_SEARCH_PARAMS m_search_params = {
sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS),
1,
0,
1,
1,
1,
15,
NULL
};

// The BLUETOOTH_DEVICE_INFO structure provides information
// about a Bluetooth device.
BLUETOOTH_DEVICE_INFO m_device_info = {
sizeof(BLUETOOTH_DEVICE_INFO),
0,
};

HANDLE m_radio = NULL;
HBLUETOOTH_RADIO_FIND m_bt = NULL;
HBLUETOOTH_DEVICE_FIND m_bt_dev = NULL;

int wmain(int argc, wchar_t **args) {
while(true) {
// The BluetoothFindFirstRadio function begins the
// enumeration of local Bluetooth radios.
m_bt = BluetoothFindFirstRadio(&m_bt_find_radio, &m_radio);

int m_radio_id = 0;
do {
m_radio_id++;

// The BluetoothGetRadioInfo function obtains information
// about a Bluetooth radio.
BluetoothGetRadioInfo(m_radio, &m_bt_info);

wprintf(L"Radio %d:\r\n", m_radio_id);
wprintf(L"\tName: %s\r\n", m_bt_info.szName);
wprintf(L"\tAddress: %02x:%02x:%02x:%02x:%02x:%02x\r\n", m_bt_info.address.rgBytes[1], m_bt_info.address.rgBytes[0], m_bt_info.address.rgBytes[2], m_bt_info.address.rgBytes[3], m_bt_info.address.rgBytes[4], m_bt_info.address.rgBytes[5]);
wprintf(L"\tClass: 0x%08x\r\n", m_bt_info.ulClassofDevice);
wprintf(L"\tManufacturer: 0x%04x\r\n", m_bt_info.manufacturer);

m_search_params.hRadio = m_radio;

::ZeroMemory(&m_device_info, sizeof(BLUETOOTH_DEVICE_INFO));
m_device_info.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);

m_bt_dev = BluetoothFindFirstDevice(&m_search_params, &m_device_info);

int m_device_id = 0;
do {
m_device_id++;

wprintf(L"\tDevice %d:\r\n", m_device_id);
wprintf(L"\t\tName: %s\r\n", m_device_info.szName);
wprintf(L"\t\tAddress: %02x:%02x:%02x:%02x:%02x:%02x\r\n", m_device_info.Address.rgBytes[1], m_device_info.Address.rgBytes[0], m_device_info.Address.rgBytes[2], m_device_info.Address.rgBytes[3], m_device_info.Address.rgBytes[4], m_device_info.Address.rgBytes[5]);
wprintf(L"\t\tClass: 0x%08x\r\n", m_device_info.ulClassofDevice);
wprintf(L"\t\tConnected: %s\r\n", m_device_info.fConnected ? L"true" : L"false");
wprintf(L"\t\tAuthenticated: %s\r\n", m_device_info.fAuthenticated ? L"true" : L"false");
wprintf(L"\t\tRemembered: %s\r\n", m_device_info.fRemembered ? L"true" : L"false");

} while(BluetoothFindNextDevice(m_bt_dev, &m_device_info));

BluetoothFindDeviceClose(m_bt_dev);

} while(BluetoothFindNextRadio(&m_bt_find_radio, &m_radio));

BluetoothFindRadioClose(m_bt);

Sleep(10000);
}

return 0;
}

我创建了一个项目并在启用了蓝牙的笔记本电脑上运行它,但没有出现任何结果,就像应用程序找不到任何蓝牙设备一样。在我继续研究并找到另一篇名为 Finding Bluetooth devices and services using C++ in Windows XP 的文章之后

#include <winsock2.h>
#include <ws2bth.h>
#include <BluetoothAPIs.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "irprops.lib")

using namespace std;

int main(){

//Initialising winsock

WSADATA data;
int result;

result = WSAStartup(MAKEWORD(2, 2), &data);//initializing winsock

if (result!=0) {
cout << "An error occured while initialising winsock, closing....";
exit(result);
}

//Initialising query for device
WSAQUERYSET queryset;

memset(&queryset, 0, sizeof(WSAQUERYSET));
queryset.dwSize = sizeof(WSAQUERYSET);
queryset.dwNameSpace = NS_BTH;

HANDLE hLookup;

result = WSALookupServiceBegin(&queryset, LUP_CONTAINERS, &hLookup);

if (result!=0){
cout << "An error occured while initialising look for devices, closing....";
Sleep(100000);
exit(result);
}

//Initialisation succedd, start looking for devices

BYTE buffer[4096];
memset(buffer, 0, sizeof(buffer));
DWORD bufferLength = sizeof(buffer);
WSAQUERYSET *pResults = (WSAQUERYSET*)&buffer;

while (result==0){
result = WSALookupServiceNext(hLookup, LUP_RETURN_NAME | LUP_CONTAINERS | LUP_RETURN_ADDR | LUP_FLUSHCACHE | LUP_RETURN_TYPE | LUP_RETURN_BLOB | LUP_RES_SERVICE,&bufferLength, pResults);

if(result==0){// A device found
//print the name of the device
LPTSTR s = pResults->lpszServiceInstanceName;
wcout << s << "found. quering for services\n";
//Initialise quering the device services
WSAQUERYSET queryset2;
memset(&queryset2, 0, sizeof(queryset2));
queryset2.dwSize = sizeof(queryset2);
queryset2.dwNameSpace = NS_BTH;
queryset2.dwNumberOfCsAddrs = 0;
CSADDR_INFO * addr = (CSADDR_INFO *)pResults->lpcsaBuffer;
WCHAR addressAsString[1000];
DWORD addressSize = sizeof(addressAsString);
WSAAddressToString(addr->RemoteAddr.lpSockaddr,addr->RemoteAddr.iSockaddrLength,NULL,addressAsString, &addressSize);
queryset2.lpszContext = addressAsString;
GUID protocol = L2CAP_PROTOCOL_UUID;
queryset2.lpServiceClassId = &protocol;
HANDLE hLookup2;
int result2 = WSALookupServiceBegin(&queryset2, LUP_FLUSHCACHE |LUP_RETURN_NAME | LUP_RETURN_TYPE | LUP_RETURN_ADDR | LUP_RETURN_BLOB | LUP_RETURN_COMMENT, &hLookup2);

if (result2 !=0){
cout << "An error occured while initializing query for services";
Sleep(100000);
exit(result);
}

//Start quering for device services
while(result2 ==0){
BYTE buffer2[4096];
memset(buffer2, 0, sizeof(buffer2));
DWORD bufferLength2 = sizeof(buffer2);
WSAQUERYSET *pResults2 = (WSAQUERYSET*)&buffer2;
result2 = WSALookupServiceNext(hLookup2,LUP_FLUSHCACHE |LUP_RETURN_NAME | LUP_RETURN_TYPE | LUP_RETURN_ADDR | LUP_RETURN_BLOB | LUP_RETURN_COMMENT,&bufferLength2,pResults2);
if(result2 == 0)
wcout << "Service found: " << pResults2->lpszServiceInstanceName <<"\n";
Sleep(100000);
}
}
}

Sleep(100000);

return 0;

}

当我编译这个并启动应用程序时出现错误消息“初始化查找设备时发生错误,正在关闭......

有什么想法吗?

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