开发者

Transfer file from PC to other device via Bluetooth code example C++ [closed]

开发者 https://www.devze.com 2023-03-01 20:45 出处:网络
Closed. This question needs to be more focused. It is not currently accepting answers. Want to improve this question? Update the question so it focuses on one problem only by editing this
Closed. This question needs to be more focused. It is not currently accepting answers.

Want to improve this question? Update the question so it focuses on one problem only by editing this post.

Closed 3 years ago.

Improve this question

Hi Stackoverflow Users !!!

Questions:

  1. I am looking for some code examples which show how can I find Bluetooth devices that are connected to my computer.
  2. I am looking for some code examples which show how can I transfer information from my computer to a mobile device.

Now I am trying to develop application on C++ which must work with Bluetooth devices. While I was researching through the internet I found some information about Bluetooth and found some code examples which present how to work with Bluetooth devices. For example, here I found code which indicates how to find all bluetooth devices within range of all bluetooth radios:

#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;
}

I created a project and ran it on my notebook with Bluetooth enabled, but no results appeared, just as if the application couldn't find any Bluetooth device. After I continued my research and found other article called 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;     

}

When I compile this one and launch application error message appears"An error occurred while initializing look for devices, closing ......"

Any ideas?


Try to check this link,

It may be useful for you ... :)


It's an old question but I feel I have to answer it for the 8k people that viewed it afterwards.

The queryset structure was wrong, that's why wsalookupbegin failed

queryset.lpcsaBuffer = NULL;

Adding this to your struct could make it work; then use wsalookupbegin to return a handle; then pass the handle on the wsalookupnext, and you get the desired results depending on your flags.

0

精彩评论

暂无评论...
验证码 换一张
取 消