已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Windows Moible, Wince 使用.NET Compact Framework的进行蓝牙(Bluetooth)广播程序的开发简述本文讲述如何使用32feet.NET实现Bluetooth的广播程序,同时演示了Broadcom stack在Windows Mobilie下的实现。背景在.NET Compact Framework下的Bluetooth开发 之 32feet.NET的反馈中camper9999同学希望实现蓝牙广播的功能,本文就是一个基于32feet.NET蓝牙广播的实现。sammylp的提出代码挂死问题,其实是使用过程的不恰当造成的,本文演示如何使用线程防止UI线程的挂起,程序的假死。另外一个同学(不好意思忘记哪位了)问32feet.NET是否支持Broadcom stack,所以本文的实现运行于安装Broadcom stack的windows mobile中。感谢各位的反馈,现在尽量在一篇文章中回答。关于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.NET Compact Framework下的Bluetooth设备的配对30 Days of .NET Windows Mobile Applications - Day 02: Bluetooth Manager(蓝牙管理器)什么是广播所谓广播就是消息发送方向公众(public)发送信息的过程,广播有一个主要的特点是消息发送方不需要知道消息接收方的存在。现实生活中广播的例子如收音机广播,GPS卫星广播,以太网同网段数据包的广播等等。可是所谓蓝牙广播其实不算严格下的广播,因为蓝牙通信过程中有发现,配对,甚至验证过程,所以通信双方是需要握手的,没办法实现严格意义上的广播。本文例子实现了一个通过注册订阅方式的组播过程(MultiCast)。实现服务端服务端负责监听和注册服务,同时把消息发送到已经注册的设备去。在例子中服务端使用PC实现,其实可以使用Windows Mobilie作为服务端,32库基本兼容PC和CE。成员定义private BluetoothListener listener;private bool listening = true;private List clientList = new List();private System.Threading.Thread listenThread;private System.Threading.Thread broadcastThread;listener负责监听服务,clientList 存放已经注册的设备,listenThread负责监听的线程,broadcastThread负责广播的线程。启动服务BluetoothRadio radio = BluetoothRadio.PrimaryRadio;if (radio = null) WriteMessage(No radio hardware or unsupported software stack); return;/ Enable discoverable moderadio.Mode = RadioMode.Discoverable;WriteMessage(Radio Name: + radio.Name);WriteMessage(Radio Address: + radio.LocalAddress);WriteMessage(Radio Mode now: + radio.Mode.ToString();listener = new BluetoothListener(BluetoothService.SerialPort);listener.Start();listening = true;listenThread = new System.Threading.Thread(ListenLoop);broadcastThread = new System.Threading.Thread(BroadcastLoop);listenThread.Start();broadcastThread.Start();WriteMessage(Service started!);启动服务的流程是:1.检查蓝牙设备是否准备好。2.设置蓝牙设备为可发现。3.启动蓝牙监听,这里配置的服务类型为串口服务,在客户端也需要配置串口服务类型才能进行通信。4.启动监听线程,这样不会挂死主线程(Main Thread)。5.启动广播线程。监听线程private void ListenLoop() byte buffer = new byte4; string dataToSend = Thanks for subscription; byte dataBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(dataToSend); while (listening) try BluetoothClient client = listener.AcceptBluetoothClient(); WriteMessage(Get a subscription from + client.RemoteMachineName); clientList.Add(client); System.IO.Stream ns = client.GetStream(); ns.Write(dataBuffer, 0, dataBuffer.Length); catch break; listener.Stop();监听线程负责处理监听订阅请求,并把订阅的设备增加到订阅列表中。AcceptBluetoothClient()会挂起改线程,直到有新的设备进行订阅。广播线程private void BroadcastLoop() List tempClientList = new List(); while (listening) System.Threading.Thread.Sleep(5000); string dataToSend = Broadcast Message at + System.DateTime.Now.ToLongTimeString(); byte dataBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(dataToSend); tempClientList.Clear(); foreach (BluetoothClient client in clientList) try System.IO.Stream ns = client.GetStream(); ns.Write(dataBuffer, 0, dataBuffer.Length); WriteMessage(Sent message to + client.RemoteMachineName); catch /connection is broken. tempClientList.Add(client); continue; /clean up the broken connections. foreach (BluetoothClient client in tempClientList) clientList.Remove(client); 广播线程负责对已经订阅的设备进行消息广播,同时管理已经断开的链接。在实际应用中,这个线程需要根据需求来更改业务流程。关闭服务WriteMessage(Service stop!);listening = false;if (listener != null) listener.Stop();释放监听资源。UI处理由于使用了多线程,不能直接更新UI,所以需要借助delegate和Invoke()函数来更新。public delegate void SafeWinFormsThreadDelegate(string msg);private void WriteMessage(string msg) SafeWinFormsThreadDelegate d = new SafeWinFormsThreadDelegate(UpdateUi); Invoke(d, new object msg );private void UpdateUi(string msg) if (listBoxMsg.Items.Count 100) listBoxMsg.Items.RemoveAt(0); listBoxMsg.SelectedIndex = listBoxMsg.Items.Add(msg);客户端客户端负责发现服务端设备,同时发起订阅请求,然后接收广播消息。客户端使用安装了BroadCom stack的Windows Mobile实现,实际上同时支持MS stack。发现BluetoothRadio radio = BluetoothRadio.PrimaryRadio;if (radio = null) WriteMessage(No radio hardware or unsupported software stack); return;/Broadcom stack doesnt support the functionality to turn on the bluetooth, turn it on manually please/radio.Mode = RadioMode.Connectable;/Scan the nearby deviceslistBoxDevices.Items.Clear();BluetoothDeviceInfo devices = client.DiscoverDevices();listBoxDevices.DataSource = devices;listBoxDevices.DisplayMember = DeviceName;listBoxDevices.ValueMember = DeviceAddress;WriteMessage(Discover successful, please select one device to subscribe.);由于当前版本的32在BroadCom stack下不支持设置蓝牙状态,所以如果设备是BroadCom stack需要屏蔽设置蓝牙状态的语句。把发现到的设备显示到ListBox里面。订阅BluetoothAddress deviceAddress = listBoxDevices.SelectedValue as BluetoothAddress;client.Connect(deviceAddress, BluetoothService.SerialPort);WriteMessage(Connected to + client.RemoteMachineName);stream = client.GetStream();receiving = true;System.Threading.Thread t = new System.Threading.Thread(ReceiveLoop);t.Start();根据发现的服务端设备的地址进行连接,然后启动线程接收消息。接收消息private void ReceiveLoop() byte buffer = new byte255; while (receiving) if (stream.CanRead) stream.Read(buffer, 0, 255); string data = System.Text.ASCIIEncoding.ASCII.GetString(buffer, 0, 255); WriteMessage(data); 在线程里接收消息,避免主UI线程挂死。源代码:/procoder/BtBroadcast.rar平台:Visual Studio 2008 + Windows Mobile 5 Packet PC SDKtaob http:/ban
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会计学毕业文章选题参考范文模板
- 学位论文写作方法
- 研究生学位论文书写格式及要求-论文格式-
- 产品全生命周期成本控制方法集成运用
- 毕业论文材料清单
- 何意百炼刚,化为绕指柔-浅论辛弃疾词之豪放与婉约
- 评语大全之本科毕业生答辩评语
- 挑战杯作品格式要求内容
- 浅析企业物资采购成本的控制论文(5范例)
- 合并HIV感染的肿瘤患者口腔黏膜炎的特殊管理方案
- 共同经营公司协议书
- 抗菌药物临床应用和管理实施细则
- 广东市政工程施工安全管理资料统一用表 上册
- 租车公司业务管理制度
- 服刑人员的情绪管理
- 小学生心理健康与辅导(第4版) 课件 第八章 小学生心理健康教育网络
- 【浙教版】2025-2026学年八年级数学下册教学工作计划(及进度表)
- 博士研究生中期考核课件
- 国家安全教育大学生读本课件高教2024年8月版课件-第七章坚持以军事、科技、文化、社会安全为保障
- 《财产犯罪概述》课件
- 智能信贷系统应用-深度研究
评论
0/150
提交评论