南京行业网站建设,中国建设银行网站下载,上海推广网站公司,简历上作品展示网站链接怎么做概述在PC端用.NET开发一个蓝牙下载的程序。实现在PC上查找周围的蓝牙设备#xff08;主要是手机#xff09;#xff0c;并将PC上的文件通过蓝牙传输到手机上。目前我采用的是OpenNETCF.Net.Bluetooth#xff0c;能够正常发现周围的蓝牙设备#xff0c;手机也能够正常进行蓝… 概述在PC端用.NET开发一个蓝牙下载的程序。实现在PC上查找周围的蓝牙设备主要是手机并将PC上的文件通过蓝牙传输到手机上。目前我采用的是OpenNETCF.Net.Bluetooth能够正常发现周围的蓝牙设备手机也能够正常进行蓝牙连接并接收文件。代码实现1、查找周围蓝牙设备 BluetoothClient bc new BluetoothClient();BluetoothDeviceInfo[] bdi;bdi bc.DiscoverDevices(10);//查找周围最多10个蓝牙设备if (bdi.Length 0){this.ShowErrMsg(请确认您的蓝牙已开启);return;}
2、打开数据流 #region OBEXOpenStreampublic bool OBEXOpenStream(string BTMAC){// serial port UUIDGuid spguid OpenNETCF.Net.Bluetooth.BluetoothService.ObexObjectPush;OpenNETCF.Net.BluetoothAddress btaddress OpenNETCF.Net.BluetoothAddress.Parse(BTMAC);client new OpenNETCF.Net.Sockets.BluetoothClient();// define endpointOpenNETCF.Net.BluetoothEndPoint endpoint new OpenNETCF.Net.BluetoothEndPoint(btaddress, spguid);try{//open socketclient.Connect(endpoint);}catch{//unable to connect (server not listening on spguid)return false;}//connect socketstream client.GetStream();return true;}#endregion
3、配对连接 private bool OBEXConnect(){//send client requestbyte[] ConnectPacket new byte[7];ConnectPacket[0] 0x80; // ConnectConnectPacket[1] 0x00; // Packetlength Hi ByteConnectPacket[2] 0x07; // Packetlength Lo ByteConnectPacket[3] 0x10; // Obex v1ConnectPacket[4] 0x00; // no flagsConnectPacket[5] 0x20; // 8k max packet size Hi ByteConnectPacket[6] 0x00; // 8k max packet size Lo Bytestream.Write(ConnectPacket, 0, ConnectPacket.Length);//listen for server responsebyte[] ReceiveBufferA new byte[3];stream.Read(ReceiveBufferA, 0, 3);if (ReceiveBufferA[0] 160) // 0xa0{//success, decode rest of packetint plength (0xff * ReceiveBufferA[1]) ReceiveBufferA[2]; //length of packet is...//listen for rest of packetbyte[] 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 flagsint maxpack (0xff * ReceiveBufferB[2]) ReceiveBufferB[3]; //max packet sizereturn true;}else{return false;}}
4、发送文本内容 //send client request, start putstring tName BRT优惠卷.txt;string tType ;string tFileContent 优惠卷内容: 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 ShowErrMsgprivate void ShowErrMsg(string err)
{string str;str script languagejavascript;str alert( err );str /script;this.RegisterStartupScript(, str);}#endregionprotected void btnSend_Click(object sender, EventArgs e)
{if (this.txtContent.Text.Trim() string.Empty){this.ShowErrMsg(请输入发送内容);return;}BluetoothClient bc new BluetoothClient();BluetoothDeviceInfo[] bdi;bdi bc.DiscoverDevices(10);//查找周围最多10个蓝牙设备if (bdi.Length 0){this.ShowErrMsg(请确认您的蓝牙已开启);return;}bool SendSuccess false;try{foreach (BluetoothDeviceInfo bd in bdi){if (OBEXOpenStream(bd.DeviceID.ToString())){if (OBEXConnect()){//send client request, start putstring tName BRT优惠卷.txt;string tType ;string tFileContent 优惠卷内容: 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(发送成功谢谢使用);}}finally{OBEXCloseStream();}}#region OBEXOpenStreampublic bool OBEXOpenStream(string BTMAC)
{// serial port UUIDGuid spguid OpenNETCF.Net.Bluetooth.BluetoothService.ObexObjectPush;OpenNETCF.Net.BluetoothAddress btaddress OpenNETCF.Net.BluetoothAddress.Parse(BTMAC);client new OpenNETCF.Net.Sockets.BluetoothClient();// define endpointOpenNETCF.Net.BluetoothEndPoint endpoint new OpenNETCF.Net.BluetoothEndPoint(btaddress, spguid);try{//open socketclient.Connect(endpoint);}catch{//unable to connect (server not listening on spguid)return false;}//connect socketstream client.GetStream();return true;}#endregion#region OBEXCloseStreamprivate void OBEXCloseStream()
{if (stream ! null){stream.Close();}if (client ! null){client.Close();}}#endregion#region OBEXConnectprivate bool OBEXConnect()
{//send client requestbyte[] ConnectPacket new byte[7];ConnectPacket[0] 0x80; // ConnectConnectPacket[1] 0x00; // Packetlength Hi ByteConnectPacket[2] 0x07; // Packetlength Lo ByteConnectPacket[3] 0x10; // Obex v1ConnectPacket[4] 0x00; // no flagsConnectPacket[5] 0x20; // 8k max packet size Hi ByteConnectPacket[6] 0x00; // 8k max packet size Lo Bytestream.Write(ConnectPacket, 0, ConnectPacket.Length);//listen for server responsebyte[] ReceiveBufferA new byte[3];stream.Read(ReceiveBufferA, 0, 3);if (ReceiveBufferA[0] 160) // 0xa0{//success, decode rest of packetint plength (0xff * ReceiveBufferA[1]) ReceiveBufferA[2]; //length of packet is...//listen for rest of packetbyte[] 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 flagsint maxpack (0xff * ReceiveBufferB[2]) ReceiveBufferB[3]; //max packet sizereturn true;}else{return false;}}#endregion#region OBEXRequestprivate int OBEXRequest(string tReqType, string tName, string tType, string tFileContent)
{//send client requestint 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 Headerint tNameLength tName.Length;int nameheadsize (3 (tNameLength * 2) 2);int namesizeHi (nameheadsize 0xff00) / 0xff;int namesizeLo nameheadsize 0x00ff;packetsize packetsize nameheadsize;if (tType ! ){//Type HeadertTypeLen tType.Length;typeheadsize 3 tTypeLen 1;typesizeHi (typeheadsize 0xff00) / 0xff;typesizeLo typeheadsize 0x00ff;packetsize packetsize typeheadsize;}//Bodyint 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 HeadertSendByte[0] reqtype; // Request type e.g. PUT-final 130tSendByte[1] Convert.ToByte(packetsizeHi); // Packetlength HitSendByte[2] Convert.ToByte(packetsizeLo); // Packetlength Looffset 2;//Name HeadertSendByte[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 unicodebyte[] tNameU System.Text.Encoding.BigEndianUnicode.GetBytes(tName);tNameU.CopyTo(tSendByte, offset 4);offset offset 3 (tNameLength * 2);tSendByte[offset 1] 0x00; // null termtSendByte[offset 2] 0x00; // null termoffset offset 2;if (tType ! ){//Type HeadertSendByte[offset 1] 0x42; // HI for Type Header 66tSendByte[offset 2] Convert.ToByte(typesizeHi); // Length of Type HeadertSendByte[offset 3] Convert.ToByte(typesizeLo); // Length of Type Headerfor (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 terminatoroffset offset 3 tTypeLen 1;}//BodytSendByte[offset 1] 0x49; //HI End of Body 73tSendByte[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[offset4fileLen] 0x00; // null terminatoroffset 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
}