成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# 在PC上的通過藍牙(Bluetooth)發送數據到手機,你會嗎?

開發 后端
在PC端用.NET開發一個藍牙下載的程序。實現在PC上查找周圍的藍牙設備(主要是手機),并將PC上的文件通過藍牙傳輸到手機上。

[[403076]]

本文轉載自微信公眾號「后端Q」,作者conan。轉載本文請聯系后端Q公眾號。

概述

在PC端用.NET開發一個藍牙下載的程序。實現在PC上查找周圍的藍牙設備(主要是手機),并將PC上的文件通過藍牙傳輸到手機上。目前我采用的是OpenNETCF.Net.Bluetooth,能夠正常發現周圍的藍牙設備,手機也能夠正常進行藍牙連接并接收文件。

代碼實現

1、查找周圍藍牙設備

  1. BluetoothClient bc = new BluetoothClient(); 
  2.         BluetoothDeviceInfo[] bdi; 
  3.         bdi = bc.DiscoverDevices(10);//查找周圍最多10個藍牙設備 
  4.         if (bdi.Length == 0) 
  5.         { 
  6.             this.ShowErrMsg("請確認您的藍牙已開啟!"); 
  7.             return
  8.         } 

2、打開數據流

  1. #region OBEXOpenStream 
  2.     public bool OBEXOpenStream(string BTMAC) 
  3.     { 
  4.  
  5.         // serial port UUID 
  6.         Guid spguid = OpenNETCF.Net.Bluetooth.BluetoothService.ObexObjectPush; 
  7.         OpenNETCF.Net.BluetoothAddress btaddress = OpenNETCF.Net.BluetoothAddress.Parse(BTMAC); 
  8.         client = new OpenNETCF.Net.Sockets.BluetoothClient(); 
  9.  
  10.         // define endpoint 
  11.         OpenNETCF.Net.BluetoothEndPoint endpoint = new OpenNETCF.Net.BluetoothEndPoint(btaddress, spguid); 
  12.  
  13.         try 
  14.         { 
  15.             //open socket 
  16.             client.Connect(endpoint); 
  17.         } 
  18.         catch 
  19.         { 
  20.             //unable to connect (server not listening on spguid) 
  21.             return false
  22.         } 
  23.  
  24.         //connect socket 
  25.         stream = client.GetStream(); 
  26.         return true
  27.     } 
  28.     #endregion 

3、配對連接

  1. private bool OBEXConnect() 
  2.     { 
  3.         //send client request 
  4.         byte[] ConnectPacket = new byte[7]; 
  5.  
  6.         ConnectPacket[0] = 0x80;      // Connect 
  7.         ConnectPacket[1] = 0x00;      // Packetlength Hi Byte 
  8.         ConnectPacket[2] = 0x07;      // Packetlength Lo Byte 
  9.         ConnectPacket[3] = 0x10;      // Obex v1 
  10.         ConnectPacket[4] = 0x00;      // no flags 
  11.         ConnectPacket[5] = 0x20;      // 8k max packet size Hi Byte 
  12.         ConnectPacket[6] = 0x00;      // 8k max packet size Lo Byte 
  13.  
  14.         stream.Write(ConnectPacket, 0, ConnectPacket.Length); 
  15.  
  16.         //listen for server response 
  17.         byte[] ReceiveBufferA = new byte[3]; 
  18.         stream.Read(ReceiveBufferA, 0, 3); 
  19.  
  20.         if (ReceiveBufferA[0] == 160) // 0xa0 
  21.         { 
  22.  
  23.             //success, decode rest of packet 
  24.             int plength = (0xff * ReceiveBufferA[1]) + ReceiveBufferA[2]; //length of packet is... 
  25.  
  26.             //listen for rest of packet 
  27.             byte[] ReceiveBufferB = new byte[plength - 3]; 
  28.             stream.Read(ReceiveBufferB, 0, plength - 3); 
  29.  
  30.             int obver = ReceiveBufferB[0]; //server obex version (16 = v1.0) 
  31.             int cflags = ReceiveBufferB[1]; //connect flags 
  32.             int maxpack = (0xff * ReceiveBufferB[2]) + ReceiveBufferB[3]; //max packet size 
  33.  
  34.             return true
  35.         } 
  36.         else 
  37.         { 
  38.             return false
  39.         } 
  40.     } 

4、發送文本內容

  1. //send client request, start put 
  2.                         string tName = "BRT優惠卷.txt"
  3.                         string tType = ""
  4.                         string tFileContent = "優惠卷內容:" + this.txtContent.Text.Trim(); 
  5.  
  6.                         int result = OBEXRequest("PUT", tName, tType, tFileContent); 
  7.                         if (result == 160) 
  8.                         { 
  9.                             SendSuccess = true
  10.                         } 

完整代碼

  1. using System; 
  2. using System.Data; 
  3. using System.Configuration; 
  4. using System.Web; 
  5. using System.Web.Security; 
  6. using System.Web.UI; 
  7. using System.Web.UI.WebControls; 
  8. using System.Web.UI.WebControls.WebParts; 
  9. using System.Web.UI.HtmlControls; 
  10. using System.Net.Sockets; 
  11. using OpenNETCF; 
  12. using OpenNETCF.Net; 
  13. using OpenNETCF.Net.Bluetooth; 
  14. using OpenNETCF.Net.Sockets; 
  15.  
  16. public partial class _Default : System.Web.UI.Page  
  17.     //Stream stream; 
  18.     NetworkStream stream; 
  19.     OpenNETCF.Net.Sockets.BluetoothClient client; 
  20.     protected void Page_Load(object sender, EventArgs e) 
  21.  
  22.     } 
  23.  
  24.     #region ShowErrMsg 
  25.     private void ShowErrMsg(string err) 
  26.         string str; 
  27.         str = "<script language='javascript'>"
  28.         str += " alert('" + err + "')"
  29.         str += "</script>"
  30.         this.RegisterStartupScript("", str); 
  31.     } 
  32.     #endregion 
  33.     protected void btnSend_Click(object sender, EventArgs e) 
  34.         if (this.txtContent.Text.Trim() == string.Empty) 
  35.         { 
  36.             this.ShowErrMsg("請輸入發送內容!"); 
  37.             return
  38.         } 
  39.         BluetoothClient bc = new BluetoothClient(); 
  40.         BluetoothDeviceInfo[] bdi; 
  41.         bdi = bc.DiscoverDevices(10);//查找周圍最多10個藍牙設備 
  42.         if (bdi.Length == 0) 
  43.         { 
  44.             this.ShowErrMsg("請確認您的藍牙已開啟!"); 
  45.             return
  46.         } 
  47.         bool SendSuccess = false
  48.         try 
  49.         { 
  50.             foreach (BluetoothDeviceInfo bd in bdi) 
  51.             { 
  52.                 if (OBEXOpenStream(bd.DeviceID.ToString())) 
  53.                 { 
  54.  
  55.                     if (OBEXConnect()) 
  56.                     { 
  57.                         //send client request, start put 
  58.                         string tName = "BRT優惠卷.txt"
  59.                         string tType = ""
  60.                         string tFileContent = "優惠卷內容:" + this.txtContent.Text.Trim(); 
  61.  
  62.                         int result = OBEXRequest("PUT", tName, tType, tFileContent); 
  63.                         if (result == 160) 
  64.                         { 
  65.                             SendSuccess = true
  66.                         } 
  67.                     } 
  68.                     OBEXCloseStream(); 
  69.                 } 
  70.                 else 
  71.                 { 
  72.                     this.ShowErrMsg("連接失敗!" + bd.DeviceName.ToString()); 
  73.                 } 
  74.  
  75.             } 
  76.             if (SendSuccess) 
  77.             { 
  78.                 this.ShowErrMsg("發送成功,謝謝使用!"); 
  79.             } 
  80.         } 
  81.         finally 
  82.         { 
  83.             OBEXCloseStream(); 
  84.         } 
  85.     } 
  86.  
  87.  
  88.     #region OBEXOpenStream 
  89.     public bool OBEXOpenStream(string BTMAC) 
  90.  
  91.         // serial port UUID 
  92.         Guid spguid = OpenNETCF.Net.Bluetooth.BluetoothService.ObexObjectPush; 
  93.         OpenNETCF.Net.BluetoothAddress btaddress = OpenNETCF.Net.BluetoothAddress.Parse(BTMAC); 
  94.         client = new OpenNETCF.Net.Sockets.BluetoothClient(); 
  95.  
  96.         // define endpoint 
  97.         OpenNETCF.Net.BluetoothEndPoint endpoint = new OpenNETCF.Net.BluetoothEndPoint(btaddress, spguid); 
  98.  
  99.         try 
  100.         { 
  101.             //open socket 
  102.             client.Connect(endpoint); 
  103.         } 
  104.         catch 
  105.         { 
  106.             //unable to connect (server not listening on spguid) 
  107.             return false
  108.         } 
  109.  
  110.         //connect socket 
  111.         stream = client.GetStream(); 
  112.         return true
  113.     } 
  114.     #endregion 
  115.  
  116.     #region OBEXCloseStream 
  117.     private void OBEXCloseStream() 
  118.         if (stream != null
  119.         { 
  120.             stream.Close(); 
  121.         } 
  122.         if (client != null
  123.         { 
  124.             client.Close(); 
  125.         } 
  126.     } 
  127.     #endregion 
  128.  
  129.     #region  OBEXConnect 
  130.     private bool OBEXConnect() 
  131.         //send client request 
  132.         byte[] ConnectPacket = new byte[7]; 
  133.  
  134.         ConnectPacket[0] = 0x80;      // Connect 
  135.         ConnectPacket[1] = 0x00;      // Packetlength Hi Byte 
  136.         ConnectPacket[2] = 0x07;      // Packetlength Lo Byte 
  137.         ConnectPacket[3] = 0x10;      // Obex v1 
  138.         ConnectPacket[4] = 0x00;      // no flags 
  139.         ConnectPacket[5] = 0x20;      // 8k max packet size Hi Byte 
  140.         ConnectPacket[6] = 0x00;      // 8k max packet size Lo Byte 
  141.  
  142.         stream.Write(ConnectPacket, 0, ConnectPacket.Length); 
  143.  
  144.         //listen for server response 
  145.         byte[] ReceiveBufferA = new byte[3]; 
  146.         stream.Read(ReceiveBufferA, 0, 3); 
  147.  
  148.         if (ReceiveBufferA[0] == 160) // 0xa0 
  149.         { 
  150.  
  151.             //success, decode rest of packet 
  152.             int plength = (0xff * ReceiveBufferA[1]) + ReceiveBufferA[2]; //length of packet is... 
  153.  
  154.             //listen for rest of packet 
  155.             byte[] ReceiveBufferB = new byte[plength - 3]; 
  156.             stream.Read(ReceiveBufferB, 0, plength - 3); 
  157.  
  158.             int obver = ReceiveBufferB[0]; //server obex version (16 = v1.0) 
  159.             int cflags = ReceiveBufferB[1]; //connect flags 
  160.             int maxpack = (0xff * ReceiveBufferB[2]) + ReceiveBufferB[3]; //max packet size 
  161.  
  162.             return true
  163.         } 
  164.         else 
  165.         { 
  166.             return false
  167.         } 
  168.     } 
  169.     #endregion 
  170.  
  171.     #region OBEXRequest 
  172.     private int OBEXRequest(string tReqType, string tName, string tType, string tFileContent) 
  173.         //send client request 
  174.  
  175.         int i; 
  176.         int offset; 
  177.         int packetsize; 
  178.         byte reqtype = 0x82; 
  179.  
  180.         int tTypeLen = 0x03; 
  181.         int typeheadsize; 
  182.         int typesizeHi = 0x00; 
  183.         int typesizeLo = 0x03; 
  184.  
  185.         //tName = "contact.vcf"
  186.         //tType = "text/x-vCard"
  187.         //tFileContent = "BEGIN:VCARD\r\nVERSION:2.1\r\nN:;aardvark\r\nFN:aardvark\r\nEND:VCARD\r\n"
  188.  
  189.         if (tReqType == "GET"
  190.         { 
  191.             reqtype = 0x83;      // 131 GET-Final 
  192.         } 
  193.  
  194.         if (tReqType == "PUT"
  195.         { 
  196.             reqtype = 0x82;      // 130 PUT-Final 
  197.         } 
  198.  
  199.         packetsize = 3; 
  200.  
  201.         //Name Header 
  202.         int tNameLength = tName.Length; 
  203.         int nameheadsize = (3 + (tNameLength * 2) + 2); 
  204.         int namesizeHi = (nameheadsize & 0xff00) / 0xff; 
  205.         int namesizeLo = nameheadsize & 0x00ff; 
  206.         packetsize = packetsize + nameheadsize; 
  207.  
  208.         if (tType != ""
  209.         { 
  210.             //Type Header 
  211.             tTypeLen = tType.Length; 
  212.             typeheadsize = 3 + tTypeLen + 1; 
  213.             typesizeHi = (typeheadsize & 0xff00) / 0xff; 
  214.             typesizeLo = typeheadsize & 0x00ff; 
  215.             packetsize = packetsize + typeheadsize; 
  216.         } 
  217.  
  218.         //Body 
  219.         int fileLen = System.Text.Encoding.Default.GetBytes(tFileContent).Length;//tFileContent.Length; 
  220.         int fileheadsize = 3 + fileLen; 
  221.         int filesizeHi = (fileheadsize & 0xff00) / 0xff; ; 
  222.         int filesizeLo = fileheadsize & 0x00ff; ; 
  223.  
  224.         packetsize = packetsize + fileheadsize; 
  225.  
  226.         int packetsizeHi = (packetsize & 0xff00) / 0xff; 
  227.         int packetsizeLo = packetsize & 0x00ff; 
  228.  
  229.         byte[] tSendByte = new byte[packetsize]; 
  230.  
  231.         //PUT-final Header 
  232.         tSendByte[0] = reqtype;                    // Request type e.g. PUT-final 130 
  233.         tSendByte[1] = Convert.ToByte(packetsizeHi);        // Packetlength Hi 
  234.         tSendByte[2] = Convert.ToByte(packetsizeLo);        // Packetlength Lo 
  235.  
  236.         offset = 2; 
  237.  
  238.         //Name Header 
  239.         tSendByte[offset + 1] = 0x01;                  // HI for Name header     
  240.         tSendByte[offset + 2] = Convert.ToByte(namesizeHi);      // Length of Name header (2 bytes per char
  241.         tSendByte[offset + 3] = Convert.ToByte(namesizeLo);      // Length of Name header (2 bytes per char
  242.  
  243.         // Name+\n\n in unicode 
  244.         byte[] tNameU = System.Text.Encoding.BigEndianUnicode.GetBytes(tName); 
  245.         tNameU.CopyTo(tSendByte, offset + 4); 
  246.  
  247.         offset = offset + 3 + (tNameLength * 2); 
  248.         tSendByte[offset + 1] = 0x00;                  // null term 
  249.         tSendByte[offset + 2] = 0x00;                  // null term 
  250.  
  251.         offset = offset + 2; 
  252.  
  253.         if (tType != ""
  254.         { 
  255.             //Type Header 
  256.             tSendByte[offset + 1] = 0x42;                  // HI for Type Header 66 
  257.             tSendByte[offset + 2] = Convert.ToByte(typesizeHi);      // Length of Type Header 
  258.             tSendByte[offset + 3] = Convert.ToByte(typesizeLo);      // Length of Type Header 
  259.  
  260.             for (i = 0; i <= (tTypeLen - 1); i++) 
  261.             { 
  262.                 tSendByte[offset + 4 + i] = Convert.ToByte(Convert.ToChar(tType.Substring(i, 1))); 
  263.             } 
  264.             tSendByte[offset + 3 + tTypeLen + 1] = 0x00;            // null terminator 
  265.  
  266.             offset = offset + 3 + tTypeLen + 1; 
  267.         } 
  268.  
  269.         //Body 
  270.         tSendByte[offset + 1] = 0x49;                  //HI End of Body 73 
  271.         tSendByte[offset + 2] = Convert.ToByte(filesizeHi);      // 
  272.         tSendByte[offset + 3] = Convert.ToByte(filesizeLo);      //1k payload + 3 for HI header 
  273.  
  274.         //for (i = 0; i <= (fileLen - 1); i++) 
  275.         //{ 
  276.         //    tSendByte[offset + 4 + i] = Convert.ToByte(tFileContent.Substring(i, 1));//Convert.ToByte(Convert.ToChar(tFileContent.Substring(i, 1))); 
  277.         //} 
  278.         byte[] bfile = System.Text.Encoding.Default.GetBytes(tFileContent); 
  279.         for (i = 0; i <= bfile.Length - 1; i++) 
  280.         { 
  281.             tSendByte[offset + 4 + i] = bfile[i]; 
  282.         } 
  283.  
  284.         //tSendByte[offset+4+fileLen] = 0x00;              // null terminator 
  285.  
  286.         offset = offset + 3 + fileLen; 
  287.  
  288.         stream.Write(tSendByte, 0, tSendByte.Length); 
  289.  
  290.         //listen for server response 
  291.  
  292.         //TODO: can hang here forever waiting response... 
  293.  
  294.         bool x = stream.DataAvailable; // changed bluetoothclient - public NetworkStream GetStream() 
  295.  
  296.         byte[] tArray4 = new byte[3]; 
  297.         stream.Read(tArray4, 0, 3); 
  298.  
  299.         x = stream.DataAvailable; 
  300.  
  301.         if (tArray4[0] == 160) // 0xa0 
  302.         { 
  303.             int plength = (tArray4[1] * 256) + tArray4[2] - 3; 
  304.             byte[] tArray5 = new byte[plength]; 
  305.             if (plength > 0) 
  306.             { 
  307.                 stream.Read(tArray5, 0, plength); 
  308.                 //TODO: data in returned packet to deal with 
  309.             } 
  310.             return 160; 
  311.         } 
  312.  
  313.         if (tArray4[0] == 197) // 0xc5 Method not allowed 
  314.         { 
  315.             return 197; 
  316.         } 
  317.  
  318.         if (tArray4[0] == 192) // 0xc0 Bad Request 
  319.         { 
  320.             return 192; 
  321.         } 
  322.  
  323.         return 0; 
  324.     } 
  325.  
  326.     #endregion 

 

 

責任編輯:武曉燕 來源: 后端Q
相關推薦

2021-04-14 06:53:52

C# 修飾符 Public

2012-02-02 17:10:35

Windows PhoC#發送短信

2012-02-24 09:04:51

云計算

2021-02-27 10:37:20

WindowsDocker版本

2021-08-19 15:36:09

數據備份存儲備份策略

2010-02-07 13:31:49

Ubuntu連接

2021-07-27 06:49:11

C#存儲檢索

2012-03-01 15:02:01

程凱傲游移動瀏覽器

2024-02-22 08:31:26

數據恢復工具MySQL回滾SQL

2020-10-13 13:50:53

PCPC市場出貨量

2020-11-03 14:56:09

手機安全信息泄露漏洞

2012-03-05 10:19:23

微軟Hadoop編程

2009-09-03 17:31:34

C#發送郵件

2023-09-26 07:38:53

c#Lambda表達式

2016-12-01 13:06:31

技術大數據數據分析

2021-03-02 07:33:13

開發C#字符

2009-06-05 10:24:37

C#排序排序

2013-11-25 15:42:45

定制手機明星手機

2021-09-22 09:42:41

鴻蒙HarmonyOS應用

2009-09-03 17:40:25

C#發送短信
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品免费一区二区三区 | 一区免费看 | 毛片一级网站 | 在线中文字幕av | 亚洲欧美中文字幕 | 91视频正在播放 | 亚洲精选久久 | 精品视频免费在线 | 亚洲欧美激情四射 | 亚洲 欧美 综合 | 欧美vide| 男人亚洲天堂 | 在线视频a | 搞黄网站在线观看 | 免费激情av | 一区二区三区四区在线 | 亚洲一区视频在线播放 | 欧美日韩在线播放 | 97视频免费 | 中文字幕乱码一区二区三区 | 免费久| aaa在线| 亚洲精品一区二区三区丝袜 | www.久久久久久久久 | 国产大片一区 | 精品国产欧美一区二区 | 久久久青草婷婷精品综合日韩 | 在线a视频网站 | 玖玖视频国产 | 国产激情一区二区三区 | 一区视频在线免费观看 | jdav视频在线观看免费 | 日日摸夜夜添夜夜添特色大片 | 老妇激情毛片免费 | 99re视频| av在线播放免费 | 免费高清av | 伊大人久久 | avtt国产| 超级乱淫av片免费播放 | 黄色a三级 |