日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#在PC上的通過藍(lán)牙(Bluetooth)發(fā)送數(shù)據(jù)到手機(jī),你會(huì)嗎?

[[403076]]

本文轉(zhuǎn)載自微信公眾號(hào)「后端Q」,作者conan。轉(zhuǎn)載本文請聯(lián)系后端Q公眾號(hào)。

創(chuàng)新互聯(lián)建站秉承專業(yè)、誠信、服務(wù)、進(jìn)取的價(jià)值觀,堅(jiān)持以客戶為中心、客戶至上的服務(wù)理念,以“關(guān)注企業(yè)需求,實(shí)現(xiàn)企業(yè)價(jià)值”為導(dǎo)向,努力為企業(yè)提供全面優(yōu)質(zhì)的互聯(lián)網(wǎng)應(yīng)用服務(wù)。服務(wù)包括空間域名、雅安服務(wù)器托管、企業(yè)郵箱、網(wǎng)站建設(shè)、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)營銷解決方案和咨詢服務(wù),以幫助企業(yè)客戶應(yīng)用互聯(lián)網(wǎng)。

概述

在PC端用.NET開發(fā)一個(gè)藍(lán)牙下載的程序。實(shí)現(xiàn)在PC上查找周圍的藍(lán)牙設(shè)備(主要是手機(jī)),并將PC上的文件通過藍(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è)備

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

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

 
 
 
  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、發(fā)送文本內(nèi)容

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

分享名稱:C#在PC上的通過藍(lán)牙(Bluetooth)發(fā)送數(shù)據(jù)到手機(jī),你會(huì)嗎?
網(wǎng)址分享:http://www.5511xx.com/article/dheggod.html