分享

C#编程连接蓝牙设备,文件收发

 goodwangLib 2019-03-09

现在很多电脑提供了蓝牙支持,很多笔记本网卡也集成了蓝牙功能,也可以采用USB蓝牙方便的连接手机等蓝牙设备进行通信。

操作蓝牙要使用类库InTheHand.Net.Personal

首先在项目中引用该类库;

C#代码 收藏代码
  1. static void Main(string[] args)  

  2. {  

  3.     BluetoothRadio bluetoothRadio = BluetoothRadio.PrimaryRadio;  

  4.     if (bluetoothRadio == null)  

  5.     {  

  6.     Console.WriteLine("没有找到本机蓝牙设备!");  

  7.     }  

  8.     else  

  9.     {  

  10.     Console.WriteLine("ClassOfDevice: " + bluetoothRadio.ClassOfDevice);  

  11.     Console.WriteLine("HardwareStatus: " + bluetoothRadio.HardwareStatus);  

  12.     Console.WriteLine("HciRevision: " + bluetoothRadio.HciRevision);  

  13.     Console.WriteLine("HciVersion: " + bluetoothRadio.HciVersion);  

  14.     Console.WriteLine("LmpSubversion: " + bluetoothRadio.LmpSubversion);  

  15.     Console.WriteLine("LmpVersion: " + bluetoothRadio.LmpVersion);  

  16.     Console.WriteLine("LocalAddress: " + bluetoothRadio.LocalAddress);  

  17.     Console.WriteLine("Manufacturer: " + bluetoothRadio.Manufacturer);  

  18.     Console.WriteLine("Mode: " + bluetoothRadio.Mode);  

  19.     Console.WriteLine("Name: " + bluetoothRadio.Name);  

  20.     Console.WriteLine("Remote:" + bluetoothRadio.Remote);  

  21.     Console.WriteLine("SoftwareManufacturer: " + bluetoothRadio.SoftwareManufacturer);  

  22.     Console.WriteLine("StackFactory: " + bluetoothRadio.StackFactory);  

  23.     }  

  24.     Console.ReadKey();  

  25. }  

 如果PC插入了蓝牙适配器,便会显示蓝牙相关信息:


然后我们就要利用蓝牙收发文件了:

前提是蓝牙设备(如手机)已经和PC配对了

C#代码 收藏代码
  1. public partial class Form1 : Form  

  2. {  

  3.     BluetoothRadio radio = null;//蓝牙适配器  

  4.     string sendFileName = null;//发送文件名  

  5.     BluetoothAddress sendAddress = null;//发送目的地址  

  6.     ObexListener listener = null;//监听器  

  7.     string recDir = null;//接受文件存放目录  

  8.     Thread listenThread, sendThread;//发送/接收线程  

  9.     public Form1()  

  10.     {  

  11.         InitializeComponent();  

  12.         radio = BluetoothRadio.PrimaryRadio;//获取当前PC的蓝牙适配器  

  13.         CheckForIllegalCrossThreadCalls = false;//不检查跨线程调用  

  14.         if (radio == null)//检查该电脑蓝牙是否可用  

  15.         {  

  16.             MessageBox.Show("这个电脑蓝牙不可用!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);  

  17.         }  

  18.         recDir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);  

  19.         labelRecDir.Text = recDir;  

  20.     }  

  21.     private void buttonSelectBluetooth_Click(object sender, EventArgs e)//选择远程蓝牙设备  

  22.     {  

  23.         SelectBluetoothDeviceDialog dialog = new SelectBluetoothDeviceDialog();  

  24.         dialog.ShowRemembered = true;//显示已经记住的蓝牙设备  

  25.         dialog.ShowAuthenticated = true;//显示认证过的蓝牙设备  

  26.         dialog.ShowUnknown = true;//显示位置蓝牙设备  

  27.         if (dialog.ShowDialog() == DialogResult.OK)  

  28.         {  

  29.             sendAddress = dialog.SelectedDevice.DeviceAddress;//获取选择的远程蓝牙地址  

  30.             labelAddress.Text = "地址:" + sendAddress.ToString() + "    设备名:" + dialog.SelectedDevice.DeviceName;  

  31.         }  

  32.     }  

  33.     private void buttonSelectFile_Click(object sender, EventArgs e)//选择要发送的本地文件  

  34.     {  

  35.         OpenFileDialog dialog = new OpenFileDialog();  

  36.         if (dialog.ShowDialog() == DialogResult.OK)  

  37.         {  

  38.             sendFileName = dialog.FileName;//设置文件名  

  39.             labelPath.Text = Path.GetFileName(sendFileName);  

  40.         }  

  41.     }  

  42.     private void buttonSend_Click(object sender, EventArgs e)//发送按钮  

  43.     {  

  44.         sendThread = new Thread(sendFile);//开启发送文件线程  

  45.         sendThread.Start();  

  46.     }  

  47.     private void sendFile()//发送文件方法  

  48.     {  

  49.         ObexWebRequest request = new ObexWebRequest(sendAddress, Path.GetFileName(sendFileName));//创建网络请求  

  50.         WebResponse response = null;  

  51.         try  

  52.         {  

  53.             buttonSend.Enabled = false;  

  54.             request.ReadFile(sendFileName);//发送文件  

  55.             labelInfo.Text = "开始发送!";  

  56.             response = request.GetResponse();//获取回应  

  57.             labelInfo.Text = "发送完成!";  

  58.         }  

  59.         catch (System.Exception ex)  

  60.         {  

  61.             MessageBox.Show("发送失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);  

  62.             labelInfo.Text = "发送失败!";  

  63.         }  

  64.         finally  

  65.         {  

  66.             if (response != null)  

  67.             {  

  68.                 response.Close();  

  69.                 buttonSend.Enabled = true;  

  70.             }  

  71.         }  

  72.     }  

  73.     private void buttonselectRecDir_Click(object sender, EventArgs e)//选择接受目录  

  74.     {  

  75.         FolderBrowserDialog dialog = new FolderBrowserDialog();  

  76.         dialog.Description = "请选择蓝牙接收文件的存放路径";  

  77.         if (dialog.ShowDialog() == DialogResult.OK)  

  78.         {  

  79.             recDir = dialog.SelectedPath;  

  80.             labelRecDir.Text = recDir;  

  81.         }  

  82.     }  

  83.     private void buttonListen_Click(object sender, EventArgs e)//开始/停止监听  

  84.     {  

  85.         if (listener == null || !listener.IsListening)  

  86.         {  

  87.             radio.Mode = RadioMode.Discoverable;//设置本地蓝牙可被检测  

  88.             listener = new ObexListener(ObexTransport.Bluetooth);//创建监听  

  89.             listener.Start();  

  90.             if (listener.IsListening)  

  91.             {  

  92.                 buttonListen.Text = "停止";  

  93.                 labelRecInfo.Text = "开始监听";  

  94.                 listenThread = new Thread(receiveFile);//开启监听线程  

  95.                 listenThread.Start();  

  96.             }  

  97.         }  

  98.         else  

  99.         {   

  100.             listener.Stop();  

  101.             buttonListen.Text = "监听";  

  102.             labelRecInfo.Text = "停止监听";  

  103.         }  

  104.     }  

  105.     private void receiveFile()//收文件方法  

  106.     {  

  107.         ObexListenerContext context = null;  

  108.         ObexListenerRequest request = null;  

  109.         while (listener.IsListening)  

  110.         {  

  111.             context = listener.GetContext();//获取监听上下文  

  112.             if (context == null)  

  113.             {  

  114.                 break;  

  115.             }  

  116.             request = context.Request;//获取请求  

  117.             string uriString = Uri.UnescapeDataString(request.RawUrl);//将uri转换成字符串  

  118.             string recFileName = recDir + uriString;  

  119.             request.WriteFile(recFileName);//接收文件  

  120.             labelRecInfo.Text = "收到文件" + uriString.TrimStart(new char[] { '/' });  

  121.         }  

  122.     }  

  123.     private void Form1_FormClosed(object sender, FormClosedEventArgs e)  

  124.     {  

  125.         if (sendThread != null)  

  126.         {  

  127.             sendThread.Abort();  

  128.         }  

  129.         if (listenThread != null)  

  130.         {  

  131.             listenThread.Abort();  

  132.         }  

  133.         if (listener != null && listener.IsListening)  

  134.         {  

  135.             listener.Stop();  

  136.         }  

  137.     }  

  138. }  

程序界面:

 

 

 SelectBluetoothDeviceDialog是一个InTheHand.Net.Personal提供的窗体,用于选择蓝牙设备:



 从手机往电脑发送文件需要在电脑上开启监听ObexListener,才能收到文件。



 核心代码:

C#代码 收藏代码
  1. BluetoothRadio radio = null;//蓝牙适配器  

  2. string sendFileName = null;//发送文件名  

  3. BluetoothAddress sendAddress = null;//发送目的地址  

  4. ObexListener listener = null;//监听器  

  5. string recDir = null;//接受文件存放目录  

  6. Thread listenThread, sendThread;//发送/接收线程  

  7. radio = BluetoothRadio.PrimaryRadio;//获取当前PC的蓝牙适配器  

  8. //关于蓝牙设备选择对话框  

  9. SelectBluetoothDeviceDialog dialog = new SelectBluetoothDeviceDialog();  

  10. dialog.ShowRemembered = true;//显示已经记住的蓝牙设备  

  11. dialog.ShowAuthenticated = true;//显示认证过的蓝牙设备  

  12. dialog.ShowUnknown = true;//显示位置蓝牙设备  

  13. sendAddress = dialog.SelectedDevice.DeviceAddress;//获取选择的远程蓝牙地址  

  14. //发送文件操作  

  15. ObexWebRequest request = new ObexWebRequest(sendAddress, Path.GetFileName(sendFileName));//创建网络请求  

  16. WebResponse response = null;  

  17. request.ReadFile(sendFileName);//发送文件  

  18. response = request.GetResponse();//获取回应  

  19. response.Close();  

  20. //接收文件  

  21. radio.Mode = RadioMode.Discoverable;//设置本地蓝牙可被检测  

  22. listener = new ObexListener(ObexTransport.Bluetooth);//创建监听  

  23. listener.Start();  

  24. listener.Stop();  

  25. ObexListenerContext context = null;  

  26. ObexListenerRequest request = null;  

  27. context = listener.GetContext();//获取监听上下文  

  28. request = context.Request;//获取请求  

  29. string uriString = Uri.UnescapeDataString(request.RawUrl);//将uri转换成字符串  

  30. string recFileName = recDir + uriString;  

  31. request.WriteFile(recFileName);//接收文件  

  32. labelRecInfo.Text = "收到文件" + uriString.TrimStart(new char[] { '/' }  

end

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多