快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

和记h188怡情:Windows Mobile 与 PC之间的通过蓝牙(Bluetooth) 传输文件的开发BRWindows Mobile客户端的实现BRPC服务端的实现BRPC客户端的实现



背景

之前也写过一些Windows Mobile和Wince下Bluetooth开拓的文章如下。

.NET Compact Framework下的Bluetooth开拓 之 Windows Embedded Source Tools for Bluetooth

.NET Compact Framework下的Bluetooth开拓 之 32feet.NET

.NET Compact Framework下的Bluetooth开拓 之 Bluetooth Virtual Serial Port (可以用于把Bluetooth的GPS receiver变成串口)

.NET Compact Framework下的Bluetooth设备的配对

30 Days of .NET [Windows Mobile Applications] - Day 02: Bluetooth Manager(蓝牙治理器) (简单的Bluetooth利用)

.NET Compact Framework下的Bluetooth广播法度榜样的开拓

时代有两个同砚问我若何实现蓝牙的文件传输,本日收拾出蓝牙文件传输的代码实现,并把他记录下来。

简介

本文讲述Windows Mobile和PC之间蓝牙文件传输的实现。经由过程应用32feet.net库对Obex的封装实现了Push文件的法度榜样。Obex Push 的PC法度榜样可以给所有支持Obex的设备传输文件,包括非Windows Mobile的设备。

OBEX

蓝牙文件传输可以借助OBEX实现。OBEX(The Object Exchange Protocol,工具互换协议)被广泛用于小我无线收集中设备的文件传输,基础上所有的移动设备都支持该协议。实现了OBEX,不仅仅可以实现 Window Mobile和PC的文件传输,可以实现所有支持OBEX协议的设备的文件传输。关于OBEX可以参考 Object Exchange Protocol.

Windows Mobile 推文件到PC

本节讲述Windows Mobile推文件到PC的实现,着实PC推文件到Windows Mobile的实现差异性不大年夜。

Windows Mobile客户真个实现

见源代码ObexPushDevice项目。

private void menuItem1_Click(object sender, EventArgs e)

{

// use the new select bluetooth device dialog

SelectBluetoothDeviceDialog sbdd = new SelectBluetoothDeviceDialog();

sbdd.ShowAuthenticated = true;

sbdd.ShowRemembered = true;

sbdd.ShowUnknown = true;

if (sbdd.ShowDialog() == DialogResult.OK)

{

OpenFileDialog ofdFileToBeam = new OpenFileDialog();

if (ofdFileToBeam.ShowDialog() == DialogResult.OK)

{

Cursor.Current = Cursors.WaitCursor;

System.Uri uri = new Uri("obex://" + sbdd.SelectedDevice.DeviceAddress.ToString() + "/" + System.IO.Path.GetFileName(ofdFileToBeam.FileName));

ObexWebResponse response = null;

try

{

ObexWebRequest request = new ObexWebRequest(uri);

request.ReadFile(ofdFileToBeam.FileName和记h188怡情);

response 和记h188怡情= request.GetResponse() as ObexWebResponse;

MessageBox.Show(response.StatusCode.ToString());

}

catch

{

MessageBox.Show("Fail to beam the file " + uri);

}

finally

{

if (response != null)

{

response.Close();

}

}

Cursor.Current = Cursors.Default;

}

}

}

SelectBluetoothDeviceDialog 是 32feet.net里面的一个蓝牙发明类,自动发明周边的蓝牙设备,然后经由过程对话框的形式出现。如下图:

选摘要推文件的目标PC后,经由过程OpenFileDialog 类选摘要推动文件,如下图:

经由过程ObexWebRequest 来推文件到目标机械。ObexWebRequest 的实现模式和HttpWebRequest类似,都是发送哀求,等等回应,回应封装在ObexWebResponse 类里面。假如目标机械的Obex办事没有打开,会发生下面的差错。关于HttpWebRequest的文件可以参考 .NET Compact Framework下HttpWebRequest开拓。

PC办事真个实现

见源代码ObexListenerPC项目。

初始化

InTheHand.Net.Bluetooth.BluetoothRadio.PrimaryRadio.Mode = InTheHand.Net.Bluetooth.RadioMode.Discoverable;

listener = new ObexListener(ObexTransport.Bluetooth);

因为蓝牙通信支持一个设备的通信,以是找出主要(Primary)设备,把他绑定到ObexListener里。

启动办事

listener.Start();

System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(DealWithRequest));

t.Start();

启动线程来处置惩罚哀求。

处置惩罚哀求

public void DealWithRequest()

{

while (listener.IsListening)

{

try

{

ObexListenerContext olc = listener.GetContext();

ObexListenerRequest olr = olc.Request;

string filename = Uri.UnescapeDataString(olr.RawUrl.TrimStart(new char[] { '/' }));

olr.WriteFile(Environment.SpecialFolder.MyDocuments + DateTime.Now.ToString("yyMMddHHmmss") + " " + filename);

BeginInvoke(new MethodInvoke和记h188怡情r(delegate()

{

this.listBoxDetail.Items.Add("Received " + filename);

}));

}

catch(Exception e)

{

BeginInvoke(new MethodInvoker(delegate()

{

this.listBoxDetail.Items.Add(e.Message);

}));

continue;

}

}

}

DealWithRequest()函数处置惩罚来自客户真个ObexListenerRequest 哀求。和记h188怡情把接管的文件寄放到Environment.SpecialFolder.MyDocuments文件夹里面。如下图收到"abc shops.bmp”文件。

竣事办事

listener.Stop();

法度榜样关闭时必要竣事办事。

PC 推文件到Windows Mobile

着实PC推文件到Windows Mobile和Windows Mobile推文件到PC的实现是一样的,应用32feet.net可以在不合Winodws Mobile之间,或者不合PC之间相互推文件,根据需求不合,可以使用源码中的不合项目。

PC客户真个实现

见源代码ObexPushPC项目。

private void buttonBeam_Click(object sender, EventArgs e)

{

// use the new select bluetooth device dialog

SelectBluetoothDeviceDialog sbdd = new SelectBluetoothDeviceDialog();

sbdd.ShowAuthenticated = true;

sbdd.ShowRemembered = true;

sbdd.ShowUnknown = true;

if (sbdd.ShowDialog() == DialogResult.OK)

{

OpenFileDialog ofdFileToBeam = new OpenFileDialog();

if (ofdFileToBeam.ShowDialog() == DialogResult.OK)

{

Cursor.Current = Cursors.WaitCursor;

System.Uri uri = new Uri("obex://" + sbdd.SelectedDevice.DeviceAddress.ToString() + "/" + System.IO.Path.GetFileName(ofdFileToBeam.FileName));

ObexWebResponse response = null;

try

{

ObexWebRequest request = new ObexWebRequest(uri);

request.ReadFile(ofdFileToBeam.FileName);

response = request.GetResponse() as ObexWebResponse;

MessageBox.Show(response.StatusCode.ToString());

}

catch

{

MessageBox.Show("Fail to beam the file " + uri);

}

finally

{

if (response != null)

{

response.Close();

}

}

Cursor.C和记h188怡情urrent = Cursors.Default;

}

}

}

可以说和上面实现的“Windows Mobile客户真个实现”没有差别, 32feet.net樊篱的差异性。

选择目标设备。

选择传输文件。

Windows Mobile默认是打开了Obex的办事,以是,在Windows Mobile可以不用支配任何法度榜样就可以接管文件了。异常方便,假如某些设备不支持Obex的办事,必要支配法度榜样,可以应用源代码中的ObexListenerDevice项目。

我同时应用这个Obex Push法度榜样给非Windows Mobile系统成功发送文件。这是一个通用的Obex文件传输法度榜样。

情况: VS 2008 + XP + Windows Mobile 6.5 + 32feet.net

源代码:http://files.cnblogs.com/procoder/BluetoothObex.rar

转自:http://www.cnblogs.com/procoder/archive/2009/09/22/Windows_Mobile_Bluetooth_Transfer_File.html

您可能还会对下面的文章感兴趣: