开发者

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

目录
  • 前言
  • 一、开发环境准备
    • 开发工具
    • 第三方库引用
  • 二、电脑端蓝牙配置
    • 三、效果展示
      • 1、扫描蓝牙设备
      • 2、选择设备并连接
      • 3、接收蓝牙消息
      • 4、发送文件到手机
    • 四、核心代码
      • 1、引用命名空间
      • 2、定义关键变量
      • 3、扫描蓝牙设备
      • 4、选择设备并建立连接
      • 5、接收数据(异步监听)
      • 6、发送数据(包括文件)
    • 五、蓝牙服务 UUID 说明
      • 六、总结
        • 成果亮点
        • 后续优化
      • 总结
        • 最后

          前言

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

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

          • 扫描可用蓝牙设备

          • 选择并建立蓝牙连接

          • 实现蓝牙数据的接收与发送

          • 支持蓝牙文件传输(SPP协议)

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

          一、开发环境准备

          开发工具

          Visual Studio 2022

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

          目标平台:wpF / WinForm

          第三方库引用

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

          Install-Package InTheHand.Net.Personal
          

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

          二、电脑端蓝牙配置

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

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

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

          三、效果展示

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

          1、扫描蓝牙设备

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

          2、选择设备并连接

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

          3、接收蓝牙消息

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

          4、发送文件到手机

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

          四、核心代码

          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 servicehttp://www.devze.comUUID = new Guid("00001132-0000-1000-8000-00805f9b34fb"); // 标准 SPP 服务 UUID
          

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

          3、扫描蓝牙设备

          private void btnScan_Click(object sender, EventArgs e)
          {
              lstDevhttp://www.devze.comices.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 建立蓝牙连接
          数据接收异步监听蓝牙输入流,实时显示接收到的内容
          文件传输支持发送本地文件到蓝牙设备

          成果亮点

          • 界面简洁直观,适合快速集成到已有项目

          • 支持文本和文件两种数据格式传输

          • 使用线程处理蓝牙通信,避免阻塞 UI

          后续优化

          • 添加断开连接按钮与异常重连机制

          • 支持蓝牙配对与自动连接

          • 封装成独立类库,便于复用

          • 增加日志记录与错误提示功能

          总结

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

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

          最后

          以上就是C#实现蓝牙连接、数据收发与文件传输功能的详细内容,更多关于C#蓝牙连接、数据收发与文件传输的资料请关注编程客栈(www.devze.com)其它相www.devze.com关文章!

          0

          上一篇:

          下一篇:

          精彩评论

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

          最新开发

          开发排行榜