蓝牙协议栈的最上层是各种应用模型,其中最典型的有 服务发现、互通、无绳电话、传真、拨号网络、耳机、局域网访问、文件传输 。
蓝牙套接字 w insock应用封装对 L2CAP 和 RFCOMM 的操作,类似 TCP/IP 套接字。
蓝牙编程方式
1. 利用模拟串口,模拟串口建立在RFCOMM 通道上。蓝牙模拟串口为满足现有系统的需求,对于新建的系统,微软不推荐。
2. 使用winsock ,需要指定服务,因此可以指定串口服务进行通信。模拟串口和 winsock 都是利用 RFCOMM 协议。使用 winsock 实现蓝牙通信可以直接监听到蓝牙设备关闭或者离开通信范围,而利用模拟串口只能通过超时来检查。
蓝牙套接字
套接字就是不同计算机为了满足各自进程间通信的需要所架设的一条数据通道。
套接字之间的连接过程分为三个步骤:
1. 服务器监听,服务器套接字进入等待连接状态,实时监控网络状态;
2. 客户端请求,客户端套接字指出服务端套接字的地址和端口号,然后向服务器套接字提出连接请求;
3. 连接确认,服务端套接字和客户端套接字建立连接,然后继续进入监听状态。
蓝牙通信有两个角色:发起方和接收方。接收方进行配置后等待发起方建立连接,一旦建立连接,两方是对等的,都可以发送或接收数据。
蓝牙套接字支持在L2CAP 和 RFCOMM 层上的通信。
服务器端首先创建一个socket 实例,将其绑定到给定的 RFCOMM 通道,在这个通道上监听连接请求。客户端也需要创建一个 socket 实例,然后利用 connect 方法连接指定的服务端。
蓝牙编程环境
利用VS2005 和 C# 编写蓝牙信息系统(包括蓝牙文件传输和蓝牙信息广播),可以采用 In The Hand 公司提供的用于开发蓝牙应用的组件 32feet.Net 。
利用32feet.Net 组件开发蓝牙应用程序,要求设备端必须包含微软蓝牙协议栈以及 .net CF 2.0 及以上版本的支持。
蓝牙应用程序开发
Delegate方法:先假定 UI 主线程为 A 线程(窗体控件的拥有者),工作线程为 B 线程,如果 B 线程要控制窗体控件,就可以调用 Invoke 方法封装 delegate 成一个标准的 windows 消息,加入 A 线程的消息队列中,最后 B 线程等待 A 线程的处理。
private delegate void SafeWinFormsThreadDelegate ( string msg);
private void writeMsg( string msg)
{
SafeWinFormsThreadDelegate d = new SafeWinFormsThreadDelegate (updateUI);
Invoke(d, new object [] { msg });
}
private void updateUI( string msg)
{
listBoxMsg.Items.Add(msg);
}
在真机上调试
调试时选择windows mobile professional Device ,在程序中设置断点。