程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Windows體系中應用C#編寫藍牙通訊法式的簡略實例

Windows體系中應用C#編寫藍牙通訊法式的簡略實例

編輯:C#入門知識

Windows體系中應用C#編寫藍牙通訊法式的簡略實例。本站提示廣大學習愛好者:(Windows體系中應用C#編寫藍牙通訊法式的簡略實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Windows體系中應用C#編寫藍牙通訊法式的簡略實例正文


如今許多電腦供給了藍牙支撐,許多筆記本網卡也集成了藍牙功效,也能夠采取USB藍牙便利的銜接手機等藍牙裝備停止通訊。
操作藍牙要應用類庫InTheHand.Net.Personal
起首在項目中援用該類庫;

static void Main(string[] args) 
{ 
  BluetoothRadio bluetoothRadio = BluetoothRadio.PrimaryRadio; 
  if (bluetoothRadio == null) 
  { 
  Console.WriteLine("沒有找到本機藍牙裝備!"); 
  } 
  else 
  { 
  Console.WriteLine("ClassOfDevice: " + bluetoothRadio.ClassOfDevice); 
  Console.WriteLine("HardwareStatus: " + bluetoothRadio.HardwareStatus); 
  Console.WriteLine("HciRevision: " + bluetoothRadio.HciRevision); 
  Console.WriteLine("HciVersion: " + bluetoothRadio.HciVersion); 
  Console.WriteLine("LmpSubversion: " + bluetoothRadio.LmpSubversion); 
  Console.WriteLine("LmpVersion: " + bluetoothRadio.LmpVersion); 
  Console.WriteLine("LocalAddress: " + bluetoothRadio.LocalAddress); 
  Console.WriteLine("Manufacturer: " + bluetoothRadio.Manufacturer); 
  Console.WriteLine("Mode: " + bluetoothRadio.Mode); 
  Console.WriteLine("Name: " + bluetoothRadio.Name); 
  Console.WriteLine("Remote:" + bluetoothRadio.Remote); 
  Console.WriteLine("SoftwareManufacturer: " + bluetoothRadio.SoftwareManufacturer); 
  Console.WriteLine("StackFactory: " + bluetoothRadio.StackFactory); 
  } 
  Console.ReadKey(); 
} 

 假如PC拔出了藍牙適配器,便會顯示藍牙相干信息:

201648155454003.jpg (544×265)

 然後我們就要應用藍牙收發文件了:
條件是藍牙裝備(如手機)曾經和PC配對了

public partial class Form1 : Form 
{ 
  BluetoothRadio radio = null;//藍牙適配器 
  string sendFileName = null;//發送文件名 
  BluetoothAddress sendAddress = null;//發送目標地址 
  ObexListener listener = null;//監聽器 
  string recDir = null;//接收文件寄存目次 
  Thread listenThread, sendThread;//發送/吸收線程 
 
  public Form1() 
  { 
    InitializeComponent(); 
    radio = BluetoothRadio.PrimaryRadio;//獲得以後PC的藍牙適配器 
    CheckForIllegalCrossThreadCalls = false;//不檢討跨線程挪用 
    if (radio == null)//檢討該電腦藍牙能否可用 
    { 
      MessageBox.Show("這個電腦藍牙弗成用!", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    } 
    recDir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
    labelRecDir.Text = recDir; 
  } 
 
  private void buttonSelectBluetooth_Click(object sender, EventArgs e)//選擇長途藍牙裝備 
  { 
    SelectBluetoothDeviceDialog dialog = new SelectBluetoothDeviceDialog(); 
    dialog.ShowRemembered = true;//顯示曾經記住的藍牙裝備 
    dialog.ShowAuthenticated = true;//顯示認證過的藍牙裝備 
    dialog.ShowUnknown = true;//顯示地位藍牙裝備 
    if (dialog.ShowDialog() == DialogResult.OK) 
    { 
      sendAddress = dialog.SelectedDevice.DeviceAddress;//獲得選擇的長途藍牙地址 
      labelAddress.Text = "地址:" + sendAddress.ToString() + "  裝備名:" + dialog.SelectedDevice.DeviceName; 
    } 
  } 
 
  private void buttonSelectFile_Click(object sender, EventArgs e)//選摘要發送的當地文件 
  { 
    OpenFileDialog dialog = new OpenFileDialog(); 
    if (dialog.ShowDialog() == DialogResult.OK) 
    { 
      sendFileName = dialog.FileName;//設置文件名 
      labelPath.Text = Path.GetFileName(sendFileName); 
    } 
  } 
 
  private void buttonSend_Click(object sender, EventArgs e)//發送按鈕 
  { 
    sendThread = new Thread(sendFile);//開啟示送文件線程 
    sendThread.Start(); 
  } 
 
  private void sendFile()//發送文件辦法 
  { 
    ObexWebRequest request = new ObexWebRequest(sendAddress, Path.GetFileName(sendFileName));//創立收集要求 
    WebResponse response = null; 
    try 
    { 
      buttonSend.Enabled = false; 
      request.ReadFile(sendFileName);//發送文件 
      labelInfo.Text = "開端發送!"; 
      response = request.GetResponse();//獲得回應 
      labelInfo.Text = "發送完成!"; 
    } 
    catch (System.Exception ex) 
    { 
      MessageBox.Show("發送掉敗!", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
      labelInfo.Text = "發送掉敗!"; 
    } 
    finally 
    { 
      if (response != null) 
      { 
        response.Close(); 
        buttonSend.Enabled = true; 
      } 
    } 
  } 
 
  private void buttonselectRecDir_Click(object sender, EventArgs e)//選擇接收目次 
  { 
    FolderBrowserDialog dialog = new FolderBrowserDialog(); 
    dialog.Description = "請選擇藍牙吸收文件的寄存途徑"; 
    if (dialog.ShowDialog() == DialogResult.OK) 
    { 
      recDir = dialog.SelectedPath; 
      labelRecDir.Text = recDir; 
    } 
  } 
 
  private void buttonListen_Click(object sender, EventArgs e)//開端/停滯監聽 
  { 
    if (listener == null || !listener.IsListening) 
    { 
      radio.Mode = RadioMode.Discoverable;//設置當地藍牙可被檢測 
      listener = new ObexListener(ObexTransport.Bluetooth);//創立監聽 
      listener.Start(); 
      if (listener.IsListening) 
      { 
        buttonListen.Text = "停滯"; 
        labelRecInfo.Text = "開端監聽"; 
        listenThread = new Thread(receiveFile);//開啟監聽線程 
        listenThread.Start(); 
      } 
    } 
    else 
    {  
      listener.Stop(); 
      buttonListen.Text = "監聽"; 
      labelRecInfo.Text = "停滯監聽"; 
    } 
  } 
 
  private void receiveFile()//收文件辦法 
  { 
    ObexListenerContext context = null; 
    ObexListenerRequest request = null; 
    while (listener.IsListening) 
    { 
      context = listener.GetContext();//獲得監聽高低文 
      if (context == null) 
      { 
        break; 
      } 
      request = context.Request;//獲得要求 
      string uriString = Uri.UnescapeDataString(request.RawUrl);//將uri轉換成字符串 
      string recFileName = recDir + uriString; 
      request.WriteFile(recFileName);//吸收文件 
      labelRecInfo.Text = "收到文件" + uriString.TrimStart(new char[] { '/' }); 
    } 
  } 
 
  private void Form1_FormClosed(object sender, FormClosedEventArgs e) 
  { 
    if (sendThread != null) 
    { 
      sendThread.Abort(); 
    } 
    if (listenThread != null) 
    { 
      listenThread.Abort(); 
    } 
    if (listener != null && listener.IsListening) 
    { 
      listener.Stop(); 
    } 
  } 
} 

法式界面:

201648155559869.jpg (427×270)

SelectBluetoothDeviceDialog是一個InTheHand.Net.Personal供給的窗體,用於選擇藍牙裝備:

201648155651467.jpg (650×495)

從手機往電腦發送文件須要在電腦上開啟監聽ObexListener,能力收到文件。

201648155708976.jpg (427×270)

焦點代碼:

BluetoothRadio radio = null;//藍牙適配器 
string sendFileName = null;//發送文件名 
BluetoothAddress sendAddress = null;//發送目標地址 
ObexListener listener = null;//監聽器 
string recDir = null;//接收文件寄存目次 
Thread listenThread, sendThread;//發送/吸收線程 
 
radio = BluetoothRadio.PrimaryRadio;//獲得以後PC的藍牙適配器 
 
//關於藍牙裝備選擇對話框 
SelectBluetoothDeviceDialog dialog = new SelectBluetoothDeviceDialog(); 
dialog.ShowRemembered = true;//顯示曾經記住的藍牙裝備 
dialog.ShowAuthenticated = true;//顯示認證過的藍牙裝備 
dialog.ShowUnknown = true;//顯示地位藍牙裝備 
sendAddress = dialog.SelectedDevice.DeviceAddress;//獲得選擇的長途藍牙地址 
 
//發送文件操作 
ObexWebRequest request = new ObexWebRequest(sendAddress, Path.GetFileName(sendFileName));//創立收集要求 
WebResponse response = null; 
request.ReadFile(sendFileName);//發送文件 
response = request.GetResponse();//獲得回應 
response.Close(); 
 
//吸收文件 
radio.Mode = RadioMode.Discoverable;//設置當地藍牙可被檢測 
listener = new ObexListener(ObexTransport.Bluetooth);//創立監聽 
listener.Start(); 
listener.Stop(); 
 
ObexListenerContext context = null; 
ObexListenerRequest request = null; 
context = listener.GetContext();//獲得監聽高低文 
request = context.Request;//獲得要求 
string uriString = Uri.UnescapeDataString(request.RawUrl);//將uri轉換成字符串 
string recFileName = recDir + uriString; 
request.WriteFile(recFileName);//吸收文件 
labelRecInfo.Text = "收到文件" + uriString.TrimStart(new char[] { '/' } 

PS:關於InTheHand.Net.Personal
InTheHand.Net.Personal.dll起源於32feet.NET。
32feet.NET是shared-source的項目,支撐CF.net 2.0和桌面版本.NET framework,供給短間隔范疇(personal area networking technologie)的通訊功效,支撐bluetooth,Infrared(IrDA)紅外等. 想懂得更多的信息可以參考其 官方主頁,其項目標裝置包和源碼是放在微軟的開源工程網站CodePlex下面的,作為.NET開辟人員我們必需要上的網站就是CodePlex~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved