背景

之前也写过一些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 voidmenuItem1_Click(objectsender, EventArgse)
{// use the new select bluetooth device dialogSelectBluetoothDeviceDialogsbdd = newSelectBluetoothDeviceDialog();
sbdd.ShowAuthenticated = true;
sbdd.ShowRemembered = true;
sbdd.ShowUnknown = true;if(sbdd.ShowDialog() == DialogResult.OK)
{OpenFileDialogofdFileToBeam = newOpenFileDialog();if(ofdFileToBeam.ShowDialog() == DialogResult.OK)
{

Cursor.Current = Cursors.WaitCursor;
System.Uriuri = newUri("obex://"+ sbdd.SelectedDevice.DeviceAddress.ToString() + "/"+ System.IO.Path.GetFileName(ofdFileToBeam.FileName));ObexWebResponseresponse = null;try{ObexWebRequestrequest = newObexWebRequest(uri);
request.ReadFile(ofdFileToBeam.FileName);

response = request.GetResponse() asObexWebResponse;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 = newObexListener(ObexTransport.Bluetooth);

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

启动服务

listener.Start();
System.Threading.Threadt = newSystem.Threading.Thread(newSystem.Threading.ThreadStart(DealWithRequest));
t.Start();

启动线程来处理请求。

处理请求

public voidDealWithRequest()
{while(listener.IsListening)
{try{ObexListenerContextolc = listener.GetContext();ObexListenerRequestolr = olc.Request;stringfilename = Uri.UnescapeDataString(olr.RawUrl.TrimStart(new char[] { '/'}));
olr.WriteFile(Environment.SpecialFolder.MyDocuments + DateTime.Now.ToString("yyMMddHHmmss") + " "+ filename);
BeginInvoke(newMethodInvoker(delegate()
{this.listBoxDetail.Items.Add("Received "+ filename);
}));
}catch(Exceptione)
{
BeginInvoke(newMethodInvoker(delegate()
{this.listBoxDetail.Items.Add(e.Message);
}));continue;
}
}
}

DealWithRequest()函数处理来自客户端的ObexListenerRequest请求。把接收的文件存放到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 voidbuttonBeam_Click(objectsender, EventArgse)
{// use the new select bluetooth device dialogSelectBluetoothDeviceDialogsbdd = newSelectBluetoothDeviceDialog();
sbdd.ShowAuthenticated = true;
sbdd.ShowRemembered = true;
sbdd.ShowUnknown = true;if(sbdd.ShowDialog() == DialogResult.OK)
{OpenFileDialogofdFileToBeam = newOpenFileDialog();if(ofdFileToBeam.ShowDialog() == DialogResult.OK)
{

Cursor.Current = Cursors.WaitCursor;
System.Uriuri = newUri("obex://"+ sbdd.SelectedDevice.DeviceAddress.ToString() + "/"+ System.IO.Path.GetFileName(ofdFileToBeam.FileName));ObexWebResponseresponse = null;try{ObexWebRequestrequest = newObexWebRequest(uri);
request.ReadFile(ofdFileToBeam.FileName);

response = request.GetResponse() asObexWebResponse;MessageBox.Show(response.StatusCode.ToString());
}catch{MessageBox.Show("Fail to beam the file "+ uri);
}finally{if(response != null)
{
response.Close();
}
}Cursor.Current = 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

本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/09/22/Windows_Mobile_Bluetooth_Transfer_File.html,如需转载请自行联系原作者

Windows Mobile 与 PC之间的通过蓝牙(Bluetooth) 传输文件的开发相关推荐

  1. Windows Mobile下GPS管理软件NavsGo之GPS侦测功能的开发

    简述 在上篇文章 Windows Mobile下GPS管理软件NavsGo之GPS监控功能的开发 概述了NavsGo项目以及讲述了GPS监控功能的开发,GPS.net控件的使用,这篇文章讲述侦测功能的 ...

  2. win10不能上传文件到服务器,Win10系统下蓝牙无法传输文件怎么解决

    在win10系统中,自带有蓝牙功能,可以方便用户们进行数据传输等,但是有些用户却反映说遇到蓝牙无法传输文件的情况,该怎么解决这样的情况呢?本文就给大家讲解一下Win10系统下蓝牙无法传输文件的具体解决 ...

  3. Android 11.0 蓝牙去掉传输文件的功能

    1.概述 在11.0的系统产品开发中,对于蓝牙的管控也是常有的功能,比如禁止连接蓝牙,禁止蓝牙传输文件等功能,最近有产品功能需求,要求禁止蓝牙传输文件,这就要从蓝牙文件传输流程分析,然后禁用传输功能就 ...

  4. Android 10.0 蓝牙去掉传输文件的功能

    1.概述 在10.0的系统产品开发中,对于蓝牙的管控功能也是特别多的,在针对蓝牙的定制化功能中,由于产品需要 要求在蓝牙文件传输过程中,进行限制就是不让蓝牙传输文件,所以要求在开始传输的时候 ,屏蔽掉 ...

  5. android蓝牙传文件,安卓手机怎样使用蓝牙连接传输文件

    首先要打开手机的蓝牙功能,平常大家不用蓝牙的时候一般处于关闭状态,需要的时候才开启,这样比较省电不是~~ 步骤一:打开蓝牙 打开蓝牙于两种方法,一种是通过快捷方式,比如桌面的蓝牙开关等以及状态栏的下拉 ...

  6. Android 9.0 蓝牙去掉传输文件的功能

    1.概述 在9.0的系统rom定制化产品开发中,在原生系统中蓝牙这块的功能也是非常重要的,所以在对蓝牙功能开发过程中,对功能的定制要求也多,在蓝牙的开发需求中,功能要求 也是越来越多的,产品需要要求在 ...

  7. Windows Moible, Wince 使用.NET Compact Framework的进行蓝牙(Bluetooth)设备配对的开发

    在.NET Compact Framework下的Bluetooth开发 之 32feet.NET 里讲述了如何使用32feet.net库来进行Bluetooth的开发,天机 同学在使用过程发现设备配 ...

  8. 计算机如何用蓝牙实现文件传输,Win10系统电脑通过蓝牙进行传输文件操作步骤...

    Win10系统如何使用蓝牙传输文件?相信用过win10系统的用户都知道,win10系统当中的蓝牙功能可以用来连接蓝牙耳机,蓝夜鼠标等设备.但其实,win10系统当中的蓝牙也可以用来传输文件,只需要用蓝 ...

  9. C#蓝牙链接+传输文件

    先下载InTheHand.Net.Personal.dll并在C中引用 using System; using System.Collections.Generic; using System.Com ...

最新文章

  1. Java类和对象基础题_java类和对象基础题2
  2. 【cocos2d-x从c++到js】16:使用cocos2d-console工具转换脚本为字节码
  3. BeanUtils.copyProperties() 用法
  4. android studio lbs项目,android studio use 百度LBS have JNICommonMemCache
  5. SpringCloud实战小贴士:版本依赖关系
  6. [Python學習筆記] 在Centos上安裝 Django
  7. MATLAB-绘图-散点图绘制
  8. AF 服务器安全防护实验
  9. “New”一个完美对象,再来好好面向对象
  10. Shopee面试问题整理
  11. Android Studio Gradle打包实践之多渠道+版本号管理
  12. 58 Hive案例(访问时长统计)
  13. Cache的映像方法
  14. 【图解】Web前端实现类似Excel的电子表格
  15. python用角度计算余弦值_Python 使用sklearn计算余弦相似度
  16. android 百度转码,自适应网站移动端被百度转码解决方案
  17. (五)进程管理:进程的状态与控制
  18. PSCC-Net: Progressive Spatio-Channel Correlation Network for Image Manipulation Detection and Locali
  19. 助力创业者成就未来,亚马逊云科技优势何在?
  20. 【产业互联网周报】福建省251个省数字经济重点建设项目公布,总投资5878亿元;湖北5G网络建设全面复工,年底建成5万个基站...

热门文章

  1. ​利用卷积神经网络学习脑电地形图表示进行分类
  2. 苹果发布会证实,他们把脸部检测技术和ARKit结合在了一起
  3. crontab 只执行一次_linux计划任务-单次任务(at)与循环任务(crontab)
  4. 1024,点亮人间烟火
  5. 不到400元,将你的手机变成可编程AI机器人丨英特尔出品
  6. 人工智能时代,怎样高效关注行业趋势、了解AI技术与落地?
  7. 首次看清体内所有癌症转移灶,深度学习方法立大功!中国留学生一作论文登《细胞》封面...
  8. P1197 [JSOI2008]星球大战
  9. iOS 总结遇到的各种坑儿
  10. OpenXml编程--去除自动生成的word文档中由分页符和换行符产生的空白页