手机蓝牙里的realtek bluetooth是什么(ble蓝牙与bluetooth蓝牙

生活常识 2023-05-14 21:49生活常识www.xinxueguanw.cn

如何把手机上的文件弄到电脑上? C# 在PC上的通过蓝牙(bluetooth)发送数据到手机

概述

在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 OBEXOpenStream public bool OBEXOpenStream(string MAC) { // serial port UUID Guid spguid = OpenNETCF.Net.Bluetooth.BluetoothService.ObexObjectPush OpenNETCF.Net.BluetoothAddress btaddress = OpenNETCF.Net.BluetoothAddress.Parse( MAC) 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、配对连接

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、发送文本内容

//send client request, start put string tName = \"BRT优惠卷.txt\" string tType = \"\" string tFileContent = \"优惠卷内容:\" + this.txtContent.Text.Trim() int result = OBEXRequest(\"PUT\", tName, tType, tFileContent) if (result == 160) { SendSuccess = true }

完整代码

using Systemusing System.Datausing System.Configurationusing System.Webusing System.Web.Securityusing System.Web.UIusing System.Web.UI.WebControlsusing System.Web.UI.WebControls.WebPartsusing System.Web.UI.HtmlControlsusing System.Net.Socketsusing OpenNETCFusing OpenNETCF.Netusing OpenNETCF.Net.Bluetoothusing OpenNETCF.Net.Socketspublic 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 = \"ltscript language='javascript'gt\" str += \" alert('\" + err + \"')\" str += \"lt/scriptgt\" this.RegisterStartupScript(\"\", str) } #endregion protected 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 put string 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 OBEXOpenStream public bool OBEXOpenStream(string MAC){ // serial port UUID Guid spguid = OpenNETCF.Net.Bluetooth.BluetoothService.ObexObjectPush OpenNETCF.Net.BluetoothAddress btaddress = OpenNETCF.Net.BluetoothAddress.Parse( MAC) 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 != ) { stream.Close() } if (client != ) { 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 // term tSendByte[offset + 2] = 0x00 // 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 lt= (tTypeLen - 1) i++) { tSendByte[offset + 4 + i] = Convert.ToByte(Convert.ToChar(tType.Substring(i, 1))) } tSendByte[offset + 3 + tTypeLen + 1] = 0x00 // 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 lt= (fileLen - 1) i++) //{ // tSendByte[offset + 4 + i] = Convert.ToByte(tFileContent.Substring(i, 1))//Convert.ToByte(Convert.ToChar(tFileContent.Substring(i, 1))) /

Copyright@2015-2025 www.xinxueguanw.cn 心血管健康网版板所有