C#實現(xiàn)藍牙連接、數(shù)據(jù)收發(fā)與文件傳輸功能
前言
在軟件開發(fā)中,跨設備通信已經(jīng)成為一種常見需求。尤其是在工業(yè)控制、智能家居、醫(yī)療設備等領域,藍牙通信因其低功耗、短距離、高安全性等優(yōu)點,被廣泛應用于各類桌面和移動應用中。
本文將以一個完整的 WinForm 桌面應用程序為例,詳細介紹如何使用 InTheHand.Net.Bluetooth 庫實現(xiàn)以下核心功能:
掃描可用藍牙設備
選擇并建立藍牙連接
實現(xiàn)藍牙數(shù)據(jù)的接收與發(fā)送
支持藍牙文件傳輸(SPP協(xié)議)
通過本文的學習,掌握如何在WinForm中輕松集成藍牙通信模塊,為大家項目添加更多交互性與擴展能力。
一、開發(fā)環(huán)境準備
開發(fā)工具
Visual Studio 2022
.NET Framework 4.7.2 或更高版本(支持 Bluetooth)
目標平臺:WPF / WinForm
第三方庫引用
使用 InTheHand.Net.Personal 提供的藍牙 SDK 來簡化藍牙操作:
Install-Package InTheHand.Net.Personal
該庫提供了對藍牙設備發(fā)現(xiàn)、連接、數(shù)據(jù)流讀寫等完整封裝,適用于 Windows 平臺下的藍牙 SPP 協(xié)議通信。
二、電腦端藍牙配置
確保你的電腦已開啟藍牙功能,并且系統(tǒng)支持藍牙適配器。

同時,在手機端打開藍牙設置,并允許接收來自其他設備的數(shù)據(jù)傳輸請求。
三、效果展示
以下是本項目實現(xiàn)的主要功能界面與運行效果截圖:
1、掃描藍牙設備

2、選擇設備并連接

3、接收藍牙消息

4、發(fā)送文件到手機

四、核心代碼
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(); // 最多可發(fā)現(xiàn) 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、接收數(shù)據(jù)(異步監(jiān)聽)
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、發(fā)送數(shù)據(jù)(包括文件)
private void btnSend_Click(object sender, EventArgs e)
{
if (btClient?.Connected != true) return;
byte[] buffer = new byte[1024]; // 緩沖區(qū)大小可以根據(jù)需要調整
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); // 分塊發(fā)送
}
}
richTextBox1.AppendText($"[發(fā)送] {txtSend.Text}\n");
txtSend.Clear();
}
五、藍牙服務 UUID 說明
藍牙服務通常通過一個唯一的 Service UUID 來標識,例如:
00001132-0000-1000-8000-00805f9b34fb
這是藍牙串口協(xié)議(SPP)的標準 UUID,適用于大多數(shù)藍牙串口設備。
如果你連接的是特定廠商的設備,請參考其官方文檔獲取正確的 UUID。
六、總結
本文詳細講解了如何在WinForm 項目中集成藍牙通信功能,使用 InTheHand.Net 庫實現(xiàn)了以下核心功能:
| 功能 | 說明 |
|---|---|
| 藍牙設備掃描 | 列出附近所有可連接的藍牙設備 |
| 設備連接 | 使用 SPP UUID 建立藍牙連接 |
| 數(shù)據(jù)接收 | 異步監(jiān)聽藍牙輸入流,實時顯示接收到的內容 |
| 文件傳輸 | 支持發(fā)送本地文件到藍牙設備 |
成果亮點
界面簡潔直觀,適合快速集成到已有項目
支持文本和文件兩種數(shù)據(jù)格式傳輸
使用線程處理藍牙通信,避免阻塞 UI
后續(xù)優(yōu)化
添加斷開連接按鈕與異常重連機制
支持藍牙配對與自動連接
封裝成獨立類庫,便于復用
增加日志記錄與錯誤提示功能
總結
藍牙通信雖然看似復雜,但借助成熟的第三方庫,我們可以在短時間內實現(xiàn)強大的跨設備通信功能。希望本文能為你提供清晰的開發(fā)思路和實用的代碼示例。
如果大家正在開發(fā)一個需要與硬件設備進行交互的 WPF 或 WinForm 應用程序,不妨嘗試加入藍牙通信功能!
最后
以上就是C#實現(xiàn)藍牙連接、數(shù)據(jù)收發(fā)與文件傳輸功能的詳細內容,更多關于C#藍牙連接、數(shù)據(jù)收發(fā)與文件傳輸?shù)馁Y料請關注腳本之家其它相關文章!
相關文章
使用C#實現(xiàn)RTP數(shù)據(jù)包傳輸 參照RFC3550
本篇文章小編為大家介紹,使用C#實現(xiàn)RTP數(shù)據(jù)包傳輸 參照RFC3550,需要的朋友參考下2013-04-04
C# WinForm實現(xiàn)Socket異步通訊的步驟詳解
Socket通訊是網(wǎng)絡編程中非?;A且重要的一部分,它為應用程序提供了基于TCP/IP協(xié)議進行數(shù)據(jù)傳輸?shù)哪芰?本文將詳細介紹如何在C#的WinForm應用程序中實現(xiàn)Socket的異步通訊,希望能為有需要的開發(fā)提供一些參考,需要的朋友可以參考下2025-07-07

