C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#蓝牙连接、数据收发与文件传输

C#实现蓝牙连接、数据收发与文件传输功能

作者:小码编匠

在软件开发中,跨设备通信已经成为一种常见需求,尤其是在工业控制、智能家居、医疗设备等领域,蓝牙通信因其低功耗、短距离、高安全性等优点,被广泛应用于各类桌面和移动应用中,本文将详细介绍C#如何实现蓝牙连接、数据收发与文件传输功能,需要的朋友可以参考下

前言

在软件开发中,跨设备通信已经成为一种常见需求。尤其是在工业控制、智能家居、医疗设备等领域,蓝牙通信因其低功耗、短距离、高安全性等优点,被广泛应用于各类桌面和移动应用中。

本文将以一个完整的 WinForm 桌面应用程序为例,详细介绍如何使用 InTheHand.Net.Bluetooth 库实现以下核心功能:

通过本文的学习,掌握如何在WinForm中轻松集成蓝牙通信模块,为大家项目添加更多交互性与扩展能力。

一、开发环境准备

开发工具

Visual Studio 2022

.NET Framework 4.7.2 或更高版本(支持 Bluetooth)

目标平台:WPF / WinForm

第三方库引用

使用 InTheHand.Net.Personal 提供的蓝牙 SDK 来简化蓝牙操作:

Install-Package InTheHand.Net.Personal

该库提供了对蓝牙设备发现、连接、数据流读写等完整封装,适用于 Windows 平台下的蓝牙 SPP 协议通信。

二、电脑端蓝牙配置

确保你的电脑已开启蓝牙功能,并且系统支持蓝牙适配器。

同时,在手机端打开蓝牙设置,并允许接收来自其他设备的数据传输请求。

三、效果展示

以下是本项目实现的主要功能界面与运行效果截图:

1、扫描蓝牙设备

2、选择设备并连接

3、接收蓝牙消息

4、发送文件到手机

四、核心代码

1、引用命名空间

using InTheHand.Net;
using InTheHand.Net.Sockets;
using InTheHand.Net.Bluetooth;

2、定义关键变量

private BluetoothClient btClient;
private NetworkStream btStream;
private BluetoothDeviceInfo selectedDevice;
private readonly Guid serviceUUID = new Guid("00001132-0000-1000-8000-00805f9b34fb"); // 标准 SPP 服务 UUID

注意:不同设备可能使用不同的 UUID,建议查阅设备文档或尝试通用 SPP UUID。

3、扫描蓝牙设备

private void btnScan_Click(object sender, EventArgs e)
{
    lstDevices.Items.Clear();
    btClient = new BluetoothClient();
    var devices = btClient.DiscoverDevices(); // 最多可发现 255 台设备

    foreach (var device in devices)
    {
        lstDevices.Items.Add($"{device.DeviceName} [{device.DeviceAddress}]");
    }
}

4、选择设备并建立连接

private void lstDevices_SelectedIndexChanged(object sender, EventArgs e)
{
    var devices = btClient.DiscoverDevices();
    selectedDevice = devices[lstDevices.SelectedIndex];
    richTextBox1.AppendText($"已选择:{selectedDevice.DeviceName}\n");
}

private void btnConnect_Click(object sender, EventArgs e)
{
    try
    {
        btClient.Connect(selectedDevice.DeviceAddress, serviceUUID);
        btStream = btClient.GetStream();
        StartListening();
        richTextBox1.AppendText("连接成功\n");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"连接失败:{ex.Message}");
    }
}

5、接收数据(异步监听)

private void StartListening()
{
    new Thread(() =>
    {
        byte[] buffer = new byte[1024];
        while (btClient?.Connected == true)
        {
            try
            {
                int bytesRead = btStream.Read(buffer, 0, buffer.Length);
                if (bytesRead > 0)
                {
                    string received = Encoding.UTF8.GetString(buffer, 0, bytesRead);
                    Invoke((MethodInvoker)delegate { richTextBox1.AppendText($"[接收] {received}\n"); });
                }
            }
            catch { break; }
        }
    }).Start();
}

6、发送数据(包括文件)

private void btnSend_Click(object sender, EventArgs e)
{
    if (btClient?.Connected != true) return;

    byte[] buffer = new byte[1024]; // 缓冲区大小可以根据需要调整
    using (FileStream fs = new FileStream(txtSend.Text, FileMode.Open, FileAccess.Read))
    {
        int bytesRead;
        while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
        {
            btClient.GetStream().Write(buffer, 0, bytesRead); // 分块发送
        }
    }

    richTextBox1.AppendText($"[发送] {txtSend.Text}\n");
    txtSend.Clear();
}

五、蓝牙服务 UUID 说明

蓝牙服务通常通过一个唯一的 Service UUID 来标识,例如:

00001132-0000-1000-8000-00805f9b34fb

这是蓝牙串口协议(SPP)的标准 UUID,适用于大多数蓝牙串口设备。

如果你连接的是特定厂商的设备,请参考其官方文档获取正确的 UUID。

六、总结

本文详细讲解了如何在WinForm 项目中集成蓝牙通信功能,使用 InTheHand.Net 库实现了以下核心功能:

功能说明
蓝牙设备扫描列出附近所有可连接的蓝牙设备
设备连接使用 SPP UUID 建立蓝牙连接
数据接收异步监听蓝牙输入流,实时显示接收到的内容
文件传输支持发送本地文件到蓝牙设备

成果亮点

后续优化

总结

蓝牙通信虽然看似复杂,但借助成熟的第三方库,我们可以在短时间内实现强大的跨设备通信功能。希望本文能为你提供清晰的开发思路和实用的代码示例。

如果大家正在开发一个需要与硬件设备进行交互的 WPF 或 WinForm 应用程序,不妨尝试加入蓝牙通信功能!

最后

以上就是C#实现蓝牙连接、数据收发与文件传输功能的详细内容,更多关于C#蓝牙连接、数据收发与文件传输的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文