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 协议通信。
二、电脑端蓝牙配置
确保你的电脑已开启蓝牙功能,并且系统支持蓝牙适配器。
同时,在手机端打开蓝牙设置,并允许接收来自其他设备的数据传输请求。
三、效果展示
以下是本项目实现的主要功能界面与运行效果截图:
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 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关文章!
精彩评论