Featured image of post Bluetooth communication- Windows in C++ & C#

Bluetooth communication- Windows in C++ & C#

C++ and C# Code Examples


Setting Up Bluetooth Communication in C++

Using Windows Sockets for Bluetooth (Winsock)

Microsoft provides the winsock2.h library for Bluetooth communication. Here’s a basic example of how to scan for Bluetooth devices using Winsock in C++:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <winsock2.h>
#include <ws2bth.h>
#include <iostream>

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

int main() {
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);

    SOCKET btSocket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
    if (btSocket == INVALID_SOCKET) {
        std::cerr << "Failed to create Bluetooth socket!" << std::endl;
        return 1;
    }

    std::cout << "Bluetooth socket created successfully!" << std::endl;
    closesocket(btSocket);
    WSACleanup();
    return 0;
}

This initializes Winsock, creates a Bluetooth socket, and then closes it. Simple, right?

Sending Data Over Bluetooth in C++

Once you’ve found a Bluetooth device, you can connect and send data using connect() and send().

1
2
3
// Assume socket is already created and connected
const char* message = "Hello Bluetooth!";
send(btSocket, message, strlen(message), 0);

That’s all you need for a basic Bluetooth connection in C++! (Except for all the error handling you should be doing. But let’s not kill the vibe.)

The most important thing to rememebr-is this is just like a socket or serial port.


Bluetooth Communication in C#

C# makes Bluetooth development a little easier thanks to the Windows APIs and .NET libraries.

Discovering Bluetooth Devices

Here’s how to list paired Bluetooth devices using C#:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
using System;
using System.Linq;
using Windows.Devices.Enumeration;
using Windows.Devices.Bluetooth;

class Program {
    static async System.Threading.Tasks.Task Main() {
        var devices = await DeviceInformation.FindAllAsync(BluetoothDevice.GetDeviceSelector());
        foreach (var device in devices) {
            Console.WriteLine($"Found: {device.Name}");
        }
    }
}

This snippet scans for Bluetooth devices and prints their names. Short, sweet, and to the point.

Connecting and Sending Data in C#

Let’s send data over Bluetooth using RfcommDeviceService (the C# equivalent of raw socket programming in C++ but without the suffering):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
using System;
using System.Text;
using System.IO;
using Windows.Devices.Bluetooth.Rfcomm;
using Windows.Storage.Streams;

class Program {
    static async System.Threading.Tasks.Task Main() {
        var device = await BluetoothDevice.FromIdAsync("YourDeviceIdHere");
        var service = await device.GetRfcommServicesAsync();
        var stream = service.Services[0].ConnectionHostName;
        
        using (DataWriter writer = new DataWriter(new MemoryStream().AsOutputStream())) {
            writer.WriteString("Hello, Bluetooth!");
            await writer.StoreAsync();
        }
    }
}

And just like that, we’re talking to Bluetooth devices without diving into raw sockets.