最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何用C#在PC上查找連接藍(lán)牙設(shè)備并實(shí)現(xiàn)數(shù)據(jù)傳輸

 更新時(shí)間:2021年03月12日 08:45:55   作者:UP技術(shù)控  
這篇文章主要介紹了如何用C#在PC上查找連接藍(lán)牙設(shè)備并實(shí)現(xiàn)數(shù)據(jù)傳輸,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下

概述

在PC端用.NET開(kāi)發(fā)一個(gè)藍(lán)牙下載的程序。實(shí)現(xiàn)在PC上查找周圍的藍(lán)牙設(shè)備(主要是手機(jī)),并將PC上的文件通過(guò)藍(lán)牙傳輸?shù)绞謾C(jī)上。目前我采用的是OpenNETCF.Net.Bluetooth,能夠正常發(fā)現(xiàn)周圍的藍(lán)牙設(shè)備,手機(jī)也能夠正常進(jìn)行藍(lán)牙連接并接收文件。

代碼實(shí)現(xiàn)

1、查找周圍藍(lán)牙設(shè)備

BluetoothClient bc = new BluetoothClient();
  BluetoothDeviceInfo[] bdi;
  bdi = bc.DiscoverDevices(10);//查找周圍最多10個(gè)藍(lán)牙設(shè)備
  if (bdi.Length == 0)
  {
   this.ShowErrMsg("請(qǐng)確認(rèn)您的藍(lán)牙已開(kāi)啟!");
   return;
  }

2、打開(kāi)數(shù)據(jù)流

#region OBEXOpenStream
 public bool OBEXOpenStream(string BTMAC)
 {

  // serial port UUID
  Guid spguid = OpenNETCF.Net.Bluetooth.BluetoothService.ObexObjectPush;
  OpenNETCF.Net.BluetoothAddress btaddress = OpenNETCF.Net.BluetoothAddress.Parse(BTMAC);
  client = new OpenNETCF.Net.Sockets.BluetoothClient();

  // define endpoint
  OpenNETCF.Net.BluetoothEndPoint endpoint = new OpenNETCF.Net.BluetoothEndPoint(btaddress, spguid);

  try
  {
   //open socket
   client.Connect(endpoint);
  }
  catch
  {
   //unable to connect (server not listening on spguid)
   return false;
  }

  //connect socket
  stream = client.GetStream();
  return true;
 }
 #endregion

3、配對(duì)連接

private bool OBEXConnect()
 {
  //send client request
  byte[] ConnectPacket = new byte[7];

  ConnectPacket[0] = 0x80;  // Connect
  ConnectPacket[1] = 0x00;  // Packetlength Hi Byte
  ConnectPacket[2] = 0x07;  // Packetlength Lo Byte
  ConnectPacket[3] = 0x10;  // Obex v1
  ConnectPacket[4] = 0x00;  // no flags
  ConnectPacket[5] = 0x20;  // 8k max packet size Hi Byte
  ConnectPacket[6] = 0x00;  // 8k max packet size Lo Byte

  stream.Write(ConnectPacket, 0, ConnectPacket.Length);

  //listen for server response
  byte[] ReceiveBufferA = new byte[3];
  stream.Read(ReceiveBufferA, 0, 3);

  if (ReceiveBufferA[0] == 160) // 0xa0
  {

   //success, decode rest of packet
   int plength = (0xff * ReceiveBufferA[1]) + ReceiveBufferA[2]; //length of packet is...

   //listen for rest of packet
   byte[] ReceiveBufferB = new byte[plength - 3];
   stream.Read(ReceiveBufferB, 0, plength - 3);

   int obver = ReceiveBufferB[0]; //server obex version (16 = v1.0)
   int cflags = ReceiveBufferB[1]; //connect flags
   int maxpack = (0xff * ReceiveBufferB[2]) + ReceiveBufferB[3]; //max packet size

   return true;
  }
  else
  {
   return false;
  }
 }

4、發(fā)送文本內(nèi)容

//send client request, start put
      string tName = "BRT優(yōu)惠卷.txt";
      string tType = "";
      string tFileContent = "優(yōu)惠卷內(nèi)容:" + this.txtContent.Text.Trim();

      int result = OBEXRequest("PUT", tName, tType, tFileContent);
      if (result == 160)
      {
       SendSuccess = true;
      }

完整代碼

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net.Sockets;
using OpenNETCF;
using OpenNETCF.Net;
using OpenNETCF.Net.Bluetooth;
using OpenNETCF.Net.Sockets;

public partial class _Default : System.Web.UI.Page 
{
 //Stream stream;
 NetworkStream stream;
 OpenNETCF.Net.Sockets.BluetoothClient client;
 protected void Page_Load(object sender, EventArgs e)
{

 }

 #region ShowErrMsg
 private void ShowErrMsg(string err)
{
  string str;
  str = "<script language='javascript'>";
  str += " alert('" + err + "')";
  str += "</script>";
  this.RegisterStartupScript("", str);
 }
 #endregion
 protected void btnSend_Click(object sender, EventArgs e)
{
  if (this.txtContent.Text.Trim() == string.Empty)
  {
   this.ShowErrMsg("請(qǐng)輸入發(fā)送內(nèi)容!");
   return;
  }
  BluetoothClient bc = new BluetoothClient();
  BluetoothDeviceInfo[] bdi;
  bdi = bc.DiscoverDevices(10);//查找周圍最多10個(gè)藍(lán)牙設(shè)備
  if (bdi.Length == 0)
  {
   this.ShowErrMsg("請(qǐng)確認(rèn)您的藍(lán)牙已開(kāi)啟!");
   return;
  }
  bool SendSuccess = false;
  try
  {
   foreach (BluetoothDeviceInfo bd in bdi)
   {
    if (OBEXOpenStream(bd.DeviceID.ToString()))
    {

     if (OBEXConnect())
     {
      //send client request, start put
      string tName = "BRT優(yōu)惠卷.txt";
      string tType = "";
      string tFileContent = "優(yōu)惠卷內(nèi)容:" + this.txtContent.Text.Trim();

      int result = OBEXRequest("PUT", tName, tType, tFileContent);
      if (result == 160)
      {
       SendSuccess = true;
      }
     }
     OBEXCloseStream();
    }
    else
    {
     this.ShowErrMsg("連接失敗!" + bd.DeviceName.ToString());
    }

   }
   if (SendSuccess)
   {
    this.ShowErrMsg("發(fā)送成功,謝謝使用!");
   }
  }
  finally
  {
   OBEXCloseStream();
  }
 }


 #region OBEXOpenStream
 public bool OBEXOpenStream(string BTMAC)
{

  // serial port UUID
  Guid spguid = OpenNETCF.Net.Bluetooth.BluetoothService.ObexObjectPush;
  OpenNETCF.Net.BluetoothAddress btaddress = OpenNETCF.Net.BluetoothAddress.Parse(BTMAC);
  client = new OpenNETCF.Net.Sockets.BluetoothClient();

  // define endpoint
  OpenNETCF.Net.BluetoothEndPoint endpoint = new OpenNETCF.Net.BluetoothEndPoint(btaddress, spguid);

  try
  {
   //open socket
   client.Connect(endpoint);
  }
  catch
  {
   //unable to connect (server not listening on spguid)
   return false;
  }

  //connect socket
  stream = client.GetStream();
  return true;
 }
 #endregion

 #region OBEXCloseStream
 private void OBEXCloseStream()
{
  if (stream != null)
  {
   stream.Close();
  }
  if (client != null)
  {
   client.Close();
  }
 }
 #endregion

 #region OBEXConnect
 private bool OBEXConnect()
{
  //send client request
  byte[] ConnectPacket = new byte[7];

  ConnectPacket[0] = 0x80;  // Connect
  ConnectPacket[1] = 0x00;  // Packetlength Hi Byte
  ConnectPacket[2] = 0x07;  // Packetlength Lo Byte
  ConnectPacket[3] = 0x10;  // Obex v1
  ConnectPacket[4] = 0x00;  // no flags
  ConnectPacket[5] = 0x20;  // 8k max packet size Hi Byte
  ConnectPacket[6] = 0x00;  // 8k max packet size Lo Byte

  stream.Write(ConnectPacket, 0, ConnectPacket.Length);

  //listen for server response
  byte[] ReceiveBufferA = new byte[3];
  stream.Read(ReceiveBufferA, 0, 3);

  if (ReceiveBufferA[0] == 160) // 0xa0
  {

   //success, decode rest of packet
   int plength = (0xff * ReceiveBufferA[1]) + ReceiveBufferA[2]; //length of packet is...

   //listen for rest of packet
   byte[] ReceiveBufferB = new byte[plength - 3];
   stream.Read(ReceiveBufferB, 0, plength - 3);

   int obver = ReceiveBufferB[0]; //server obex version (16 = v1.0)
   int cflags = ReceiveBufferB[1]; //connect flags
   int maxpack = (0xff * ReceiveBufferB[2]) + ReceiveBufferB[3]; //max packet size

   return true;
  }
  else
  {
   return false;
  }
 }
 #endregion

 #region OBEXRequest
 private int OBEXRequest(string tReqType, string tName, string tType, string tFileContent)
{
  //send client request

  int i;
  int offset;
  int packetsize;
  byte reqtype = 0x82;

  int tTypeLen = 0x03;
  int typeheadsize;
  int typesizeHi = 0x00;
  int typesizeLo = 0x03;

  //tName = "contact.vcf";
  //tType = "text/x-vCard";
  //tFileContent = "BEGIN:VCARD\r\nVERSION:2.1\r\nN:;aardvark\r\nFN:aardvark\r\nEND:VCARD\r\n";

  if (tReqType == "GET")
  {
   reqtype = 0x83;  // 131 GET-Final
  }

  if (tReqType == "PUT")
  {
   reqtype = 0x82;  // 130 PUT-Final
  }

  packetsize = 3;

  //Name Header
  int tNameLength = tName.Length;
  int nameheadsize = (3 + (tNameLength * 2) + 2);
  int namesizeHi = (nameheadsize & 0xff00) / 0xff;
  int namesizeLo = nameheadsize & 0x00ff;
  packetsize = packetsize + nameheadsize;

  if (tType != "")
  {
   //Type Header
   tTypeLen = tType.Length;
   typeheadsize = 3 + tTypeLen + 1;
   typesizeHi = (typeheadsize & 0xff00) / 0xff;
   typesizeLo = typeheadsize & 0x00ff;
   packetsize = packetsize + typeheadsize;
  }

  //Body
  int fileLen = System.Text.Encoding.Default.GetBytes(tFileContent).Length;//tFileContent.Length;
  int fileheadsize = 3 + fileLen;
  int filesizeHi = (fileheadsize & 0xff00) / 0xff; ;
  int filesizeLo = fileheadsize & 0x00ff; ;

  packetsize = packetsize + fileheadsize;

  int packetsizeHi = (packetsize & 0xff00) / 0xff;
  int packetsizeLo = packetsize & 0x00ff;

  byte[] tSendByte = new byte[packetsize];

  //PUT-final Header
  tSendByte[0] = reqtype;     // Request type e.g. PUT-final 130
  tSendByte[1] = Convert.ToByte(packetsizeHi);  // Packetlength Hi
  tSendByte[2] = Convert.ToByte(packetsizeLo);  // Packetlength Lo

  offset = 2;

  //Name Header
  tSendByte[offset + 1] = 0x01;     // HI for Name header 
  tSendByte[offset + 2] = Convert.ToByte(namesizeHi);  // Length of Name header (2 bytes per char)
  tSendByte[offset + 3] = Convert.ToByte(namesizeLo);  // Length of Name header (2 bytes per char)

  // Name+\n\n in unicode
  byte[] tNameU = System.Text.Encoding.BigEndianUnicode.GetBytes(tName);
  tNameU.CopyTo(tSendByte, offset + 4);

  offset = offset + 3 + (tNameLength * 2);
  tSendByte[offset + 1] = 0x00;     // null term
  tSendByte[offset + 2] = 0x00;     // null term

  offset = offset + 2;

  if (tType != "")
  {
   //Type Header
   tSendByte[offset + 1] = 0x42;     // HI for Type Header 66
   tSendByte[offset + 2] = Convert.ToByte(typesizeHi);  // Length of Type Header
   tSendByte[offset + 3] = Convert.ToByte(typesizeLo);  // Length of Type Header

   for (i = 0; i <= (tTypeLen - 1); i++)
   {
    tSendByte[offset + 4 + i] = Convert.ToByte(Convert.ToChar(tType.Substring(i, 1)));
   }
   tSendByte[offset + 3 + tTypeLen + 1] = 0x00;   // null terminator

   offset = offset + 3 + tTypeLen + 1;
  }

  //Body
  tSendByte[offset + 1] = 0x49;     //HI End of Body 73
  tSendByte[offset + 2] = Convert.ToByte(filesizeHi);  //
  tSendByte[offset + 3] = Convert.ToByte(filesizeLo);  //1k payload + 3 for HI header

  //for (i = 0; i <= (fileLen - 1); i++)
  //{
  // tSendByte[offset + 4 + i] = Convert.ToByte(tFileContent.Substring(i, 1));//Convert.ToByte(Convert.ToChar(tFileContent.Substring(i, 1)));
  //}
  byte[] bfile = System.Text.Encoding.Default.GetBytes(tFileContent);
  for (i = 0; i <= bfile.Length - 1; i++)
  {
   tSendByte[offset + 4 + i] = bfile[i];
  }

  //tSendByte[offset+4+fileLen] = 0x00;    // null terminator

  offset = offset + 3 + fileLen;

  stream.Write(tSendByte, 0, tSendByte.Length);

  //listen for server response

  //TODO: can hang here forever waiting response...

  bool x = stream.DataAvailable; // changed bluetoothclient - public NetworkStream GetStream()

  byte[] tArray4 = new byte[3];
  stream.Read(tArray4, 0, 3);

  x = stream.DataAvailable;

  if (tArray4[0] == 160) // 0xa0
  {
   int plength = (tArray4[1] * 256) + tArray4[2] - 3;
   byte[] tArray5 = new byte[plength];
   if (plength > 0)
   {
    stream.Read(tArray5, 0, plength);
    //TODO: data in returned packet to deal with
   }
   return 160;
  }

  if (tArray4[0] == 197) // 0xc5 Method not allowed
  {
   return 197;
  }

  if (tArray4[0] == 192) // 0xc0 Bad Request
  {
   return 192;
  }

  return 0;
 }

 #endregion
}

以上就是如何用C#在PC上查找連接藍(lán)牙設(shè)備并實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)脑敿?xì)內(nèi)容,更多關(guān)于c# 藍(lán)牙傳輸?shù)馁Y料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Qt程序中調(diào)用C#編寫的dll(推薦)

    Qt程序中調(diào)用C#編寫的dll(推薦)

    這篇文章主要介紹了Qt程序中調(diào)用C#編寫的dll,本文圖文并茂給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • C#實(shí)現(xiàn)簡(jiǎn)單獲取及設(shè)置Session類

    C#實(shí)現(xiàn)簡(jiǎn)單獲取及設(shè)置Session類

    這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)單獲取及設(shè)置Session類,涉及C#針對(duì)session的設(shè)置及獲取的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C#中實(shí)現(xiàn)插入、刪除Excel分頁(yè)符的方法

    C#中實(shí)現(xiàn)插入、刪除Excel分頁(yè)符的方法

    這篇文章主要給大家介紹了關(guān)于在C#中實(shí)現(xiàn)插入、刪除Excel分頁(yè)符的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • c#強(qiáng)制類型轉(zhuǎn)換int方式

    c#強(qiáng)制類型轉(zhuǎn)換int方式

    這篇文章主要介紹了c#強(qiáng)制類型轉(zhuǎn)換int方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • C#中this的使用實(shí)例分析

    C#中this的使用實(shí)例分析

    這篇文章主要介紹了C#中this的使用方法,this是C#程序設(shè)計(jì)中非常重要的一個(gè)關(guān)鍵字,本文以實(shí)例形式對(duì)此作出簡(jiǎn)單的用法分析,需要的朋友可以參考下
    2014-08-08
  • C#實(shí)現(xiàn)協(xié)變和逆變案例

    C#實(shí)現(xiàn)協(xié)變和逆變案例

    這篇文章介紹了C#實(shí)現(xiàn)協(xié)變和逆變的案例,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • c#數(shù)據(jù)庫(kù)與TXT導(dǎo)入導(dǎo)出的實(shí)例

    c#數(shù)據(jù)庫(kù)與TXT導(dǎo)入導(dǎo)出的實(shí)例

    最近剛學(xué)完ADO.NET,做了個(gè)數(shù)據(jù)導(dǎo)入導(dǎo)出的題目,是將txt中的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù),然后將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出到txt中,這里說(shuō)的數(shù)據(jù)的格式是“tom|23”,tom指名字,23指年齡。廢話也不多說(shuō)了,大家直接看代碼。
    2013-04-04
  • C#中List和SortedList的簡(jiǎn)介

    C#中List和SortedList的簡(jiǎn)介

    今天小編就為大家分享一篇關(guān)于C#中List和SortedList的簡(jiǎn)介,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • C#窗口實(shí)現(xiàn)定時(shí)關(guān)機(jī)系統(tǒng)

    C#窗口實(shí)現(xiàn)定時(shí)關(guān)機(jī)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C#窗口實(shí)現(xiàn)定時(shí)關(guān)機(jī)系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • C#中的數(shù)組作為參數(shù)傳遞所引發(fā)的問(wèn)題

    C#中的數(shù)組作為參數(shù)傳遞所引發(fā)的問(wèn)題

    這篇文章主要介紹了C#中的數(shù)組作為參數(shù)傳遞所引發(fā)的問(wèn)題 的相關(guān)資料,需要的朋友可以參考下
    2016-03-03

最新評(píng)論

泾川县| 永善县| 罗甸县| 木里| 彭州市| 九龙城区| 舟曲县| 三河市| 南雄市| 阿克| 三原县| 松江区| 关岭| 房山区| 女性| 侯马市| 池州市| 信阳市| 洮南市| 东兰县| 九龙城区| 荣成市| 格尔木市| 抚顺县| 麦盖提县| 昌都县| 平果县| 嘉兴市| 庆城县| 龙江县| 贵州省| 金华市| 商都县| 娄烦县| 阿尔山市| 会东县| 康平县| 清苑县| 台中市| 喀喇| 昭苏县|