




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于蓝牙的遥控应用PPT控制软件【摘要】 蓝牙,是一种短距离无线通信技术,用于替代数字设备牙设备运行在和计算机外设间的电缆连接以及实现数字设备间的无线组网。作为MobileSync的一部分,本文介绍了一种的基于Windows Mobile平台和微软本地堆栈的蓝牙通信、控制应用软件。该软件以TCP/IP为参考模型,在应用程序层次调用windows套接字网络接口函数以及蓝牙堆栈协议建立手机与PC机之间的连接。手机端通过传统的消息机制将当前界面下获得的键值发送给PC端,服务器对收到的信息进行逻辑分析,从而模拟相应的按键实现控制。经过软件编写和测试,表明该软件便于调试修改,蓝牙通信网络传输数据稳定可靠,PC端程序能实时对消息进行分析处理。由于本方案设计是按照蓝牙技术标准设计,所以兼容符合蓝牙标准的蓝牙手机,适配器等相关蓝牙产品因此,该系统极具推广价值和市场价值。【关键词】 Socket,蓝牙,环境配置,用户界面,虚拟按键 49The application of remote control based on the Bluetooth PowerPoint control software【Abstract】 Bluetooth is a short-range wireless communication technology, replace digital equipment for equipment operation and computer peripherals cable connections among the wireless network digital devices.As a part of MobileSync,this article introduces a kind of bluetooth communication and control application software based on the Windows Mobile platform and Microsoft native bluetooth stack. This software with TCP/IP model for reference, build a connection between the cell-phone and the PC by using the socket network interface and bluetooth protocol stack. The cell-phone send key assignments got from the current interface to the PC by the traditional message processed,while the server deal with the received information,thus realize the control by imitating the keyboard. After software writing and testing,it is obviously known that the software is easy to debug and alter, transporting data by bluetooth wireless network is Stable and reliable and the procedures in PC can Analysis and process the data in time. Therefore, this system is extremely popularization value and market value.【Key Words】 Socket,Bluetooth,Enviroment configuaration,User interface,Visual key 目录第1章 绪论11.1 选题背景11.2 技术现状11.3 研究内容21.4 应用及前景2第2章 软件框架32.1 系统框图32.1.1 客户端框图32.1.2 服务器框图42.2 原理框图52.2.1 蓝牙层次52.2.2 套接字层次6第3章 环境配置93.1 手机环境配置93.1.1 开发平台93.1.2 开发包103.2 PC环境配置103.2.1 开发平台103.2.2 开发包11第4章 软件设计124.1 软件流程图124.2 客户端设计134.2.1 用户界面134.2.2 遍历154.2.3 连接164.2.4 发送194.3 服务器设计194.3.1 连接214.3.2 接收224.3.3 模拟按键224.4 错误代码及解决方法24第5章 软件调试与测试265.1 客户端调试265.2 服务器调试275.2 联合调试28结论29参考文献30附录32附录A 客户端程序32附录B 服务器程序41致谢49图目录图2.1 客户端框图3图2.2 服务器框图4图2.3 带有应用程序的蓝牙结构5图2.4顺序服务器的套接字结构7图4.1套接字程序流程图12图4.2 用户主界面程序流程图14图4.3 Senddata函数流程图16图5.1手机端运行结果图26图5.2 PC端运行结果图27图5.3系统运行结果图28表目录表4.1 error code24表5.1功能对照表28第1章 绪论1.1 选题背景通过利用蓝牙技术短距离传输的特性,使用windows mobile手机的蓝牙通讯功能遥控PC的简单操作。大学里老师上课大多使用Office的Powerpoint软件来播放课件,由于要通过控制鼠标来操作Powerpoint软件,就使得老师只能坐在讲台上,这样课堂的气氛因为老师不能走下来而缺少互动,老师容易讲的无趣,学生容易听得无聊。所以如果老师既能够走下来和学生互动,又能随时操作Powerpoint软件就是两全其美的事了。而目前大多数蓝牙控制软件往往受到操作系统以及辅助软件的限制而得不到广泛应用。本课题研究的内容正是关于解决这些问题的。1.2 技术现状在 Windows XP SP1 之前,微软是不支持蓝牙的。直到 SP2,native stack 也仅仅支持少数的几种设备。蓝牙刚刚问世的时候,微软一直抱着观望的态度。于是后来 IVT 和 Widcomm先后开发了自己的协议栈和管理应用程序,来配合蓝牙外设在 Win32 平台上的使用。对于蓝牙软件开发商来说,问题就很棘手。市场上有三种协议栈,最好是全都支持以适应最大可能的应用范围。Linux 的 BlueZ 栈好像在 2.4.x 时代就确定了主流地位,Windows XP SP2之后的版本能够很顺利地自动检测出蓝牙适配器,同时Control Panel里面多了一个Bluetooth Devices的控件用于通信。但是微软缺省的蓝牙管理程序比 IVT 差太多了,很明显 Microsoft Native Stack 将是未来开发的主流,而要想得到用户的广泛应用,还差一套完善的设备管理程序。11.3 研究内容本课题研究设计了基于蓝牙接口的无线PPT遥控软件,系统由一部搭载windows mobile 6.0操作系统的手机和windows XP SP3的PC机组成。客户端软件可遍历区域内的所有蓝牙设备,用户选定目的服务器将相应的功能数据写入窗口的数据输入区域,客服机之间建立连接后,这些数据通过蓝牙通信网络发送给服务器PC机,服务器通过对接收到的数据进行分析并执行相应的按键模拟程序,从而达到实时控制的目的。采用基于BTH 2.0协议的即插即用CSR芯片解决了蓝牙硬件接口,基于winsock2.2版本的面向对象连接模型解决了数据的无线通信,采用windows窗口消息机制和visual key定义解决了客户端控制数据的捕获传递和服务器端按键的模拟。1.4 应用及前景使用微软本地堆栈将是未来开发蓝牙的主流,但要想得到用户的广泛应用,还差一套完善的设备管理程序。本课题的研究为使用微软本地堆栈开发替代widcomm和IVT的蓝牙应用程序提供了一种新的思路。本套系统不仅价格低廉,调试灵活,运行成本低。而且,若深一步展开本课题,在建立手机与PC机连接的情况下,开发人员可以将手机上的大部分按键甚至按键的组合发送给PC,并对接收到的信息进行判断和模拟。所以,除了控制PPT的播放外,还能进行诸如媒体播放控制,网页浏览控制以及常用的windows桌面控制等等。若结合微软提供的mobile SDK中ActiveSync的部分,可将现有的mobilesync软件功能作进一步的完善。反之,通过调换Client和Serve的程序,实现PC控制手机也是完全可以实现的。本软件在消费电子类市场前景广泛,具有较高经济效益。2第2章 软件框架2.1 系统框图2.1.1 客户端框图Windows mobile 6.0操作系统下蓝牙客户端的软件结构如图2.1所示图2.1 客户端框图2.1.2 服务器框图PC端服务器软件结构如图2.2所示图2.2 服务器框图2.2 原理框图2.2.1 蓝牙层次一个标准蓝牙结构框架入图2.3所示图2.3 带有应用程序的蓝牙结构由蓝牙特殊利益小组(SIG)所颁布的蓝牙规范就是蓝牙无线通信协议标准,它规定了蓝牙应用应遵循的标准和需要达到的要求,包括核心协议(Core)与应用框架(Profiles)两部分。协议规范部分定义了蓝牙的各层通信协议,遵循开放系统互连参考模型,从低到高地定义了蓝牙协议堆栈的各个层次。 按照蓝牙协议的逻辑功能,协议堆栈由下至上分为三个部分:传输协议、中介协议和应用协议。本文中主机控制接口(HCI)位于传输协议之中,它并不是严格意义上的通信协议,它仅为应用协议堆栈的高层部分提供了一个访问低层传输协议的指令接口。3如果我们从HCI层出发,可以将蓝牙协议堆栈分为硬件与软件2个协议块。硬件部分由射频部分(RF)、基带部分(BB)、链路管理器部分(LM)和HCI固件构成,我们也可以把硬件部分称为蓝牙子系统。软件部分由HCI主机驱动程序、逻辑链路控制适配协议(L2CAP)、串口仿真协议(RFCOMM)、服务发现协议(SDP)、电话控制协议(TCS)及其它应用协议所构成。在蓝牙协议堆栈模型中的中间部分为对本文中HCI协议层软件的具体划分。42.2.2 套接字层次使用蓝牙套接字目的发现其他蓝牙设备,并通过蓝牙读写数据。在通过蓝牙建立通信频道中有两个角色:发起方和接受方。接受方进行配置后等待发起方建立连接。一旦连接建立,两方是对等的,都可以发送或接受数据。这个API可以在两方进行编程。结构关系:蓝牙套接字API支持在L2CAP和RFCOMM层上的通信。API基于客户端套接字API,客户端套接字API是允许客户端和远程设备连接或者让远程设备连接自身,并在断开前发送和接收数据标准API。蓝牙套接字API中还为蓝牙的应用加入了适当的类型和常量描述:API有五个关键的概念:套接字地址,远程设备询问,RFCOMM命令和选项,L2CAP命令和HCI命令套接字地址:每个蓝牙设备都有一个唯一的48位地址,封装在TBTDevAddr。套接字API通过TSockAddr封装了一个泛化的通信终点,而蓝牙则提供了一个专门的版本TBTSockAddr,里面添加了蓝牙设备地址。远程设备查询:客户端能通过RHostResolver询问远程设备是否可用。一个TinquirySockAddr类型的参数用来提供这样地询问:主要是用来限制对设备细节类的发现。命令和选项:我们能够通过调用RSocket:Ioctl()发送命令到一个RFCOMM套接字。套接字的选项则能够分别通过Rsocket:GetOpt()和Rsocket:SetOpt()来设置。通过Rsocket:Ioctl(),我们能发送命令到L2CAP套接字和HCI层。5基于TCP结构的套接字的典型应用如图2.4所示图2.4顺序服务器的套接字结构上图很好的描述了顺序服务器, 那是在某一时刻只能服务一个客户的服务器,就像我们的daytime服务器能做的那样。这只能存在于客户端与服务器没有真正的“对话”的时候:服务器一检测到一个与客户的连接,就送出一些数据并关闭连接。整个操作只花费若干纳秒就完成了。这张结构图中,除了在父进程 fork之后和父进程退出前的短暂时间内,一直只有一个进程活跃:服务器不占用许多内存和其它系统资源。6注意作者已经将初始化守护进程加入到流程图中。我们不需要初始化我们自己的守护进程,但这是在程序流程中设置signal 处理程序、打开我们可能需要的文件等操作的好地方。几乎图中的所有部分都可以用于描述许多不同的服务器。条目 serve 是个例外,可以考虑为一个“黑盒子”,那是你要为你自己的服务器专门设计的东西, 并且“接到其余部分上”。并非所有协议都那么简单。许多协议收到一个来自客户的请求,回复请求,然后接收下一个来自同一客户的请求。因此,那些协议不知道将要服务客户多长时间。这些服务器通常为每个客户启动一个新进程当新进程服务它的客户时,守护进程可以继续监听更多的连接。7第3章 环境配置3.1 手机环境配置本课题所使用的手机为三星SGH-i617,搭载windows mobile 6.0 standard操作系统,为目前较高等的windows移动平台,所以其开发环境配置的要求也教高。3.1.1 开发平台由于专门面向移动设备开发的EVC+目前只能支持到windows moblie 5.0的操作系统,而高于此版本的操作系统在连接到设备时将无法被识别。所以最终我选择功能更为全面的visual studio 2005 Team Suite作为本软件客户端部分的开发平台。visual studio 2005是微软公司开发的第一款集成了Win32平台和移动设备平台的软件开发系统,完全支持标准C+语言。使用visual C+ 2005开发应用程序,拥有非常大的灵活性,对于手机上可执行的代码,我使用MFC来编写windows应用程序的图形用户界面。MFC封装了用于GUI创建和控制的windows 操作系统API,因此大大简化了程序开发过程。为了配合windows mobile 6.0 SDK使用,我又安装了visual studio 2005 Team Suite的SP1补丁。8visual C+ 2005中集成的.NET Framework是微软公司.NET开发产品的核心概念,为了开发面向windows mobile 6.0的移动设备程序,必须安装.NET Compact Framework 2.0 Service Pack 1,该组件包中包括了公共语言运行库(CLR)和 .NET Compact Framework 类库。9ActiveSync 4.5 用于实现Visual studio 2005与手机同步调试时连接和.NET Compact Framework 2.0安装时对设备的更新。3.1.2 开发包Windows Mobile 6 SDK 提供了使用 Microsoft Visual Studio 2005 开始开发 蓝牙应用程序时所需的工具和库。将 Visual Studio 2005 和 Windows Mobile 6 SDK 结合在一起,可在提供一些比以往更轻松地开发 Windows Mobile 应用程序所需的工具和功能的同时,创建一个功能强大的移动设备开发平台。Windows Mobile 6 SDK在安装时会自动在Visual Studio 2005的连接选项中将包含文件和库文件的路径设置为SDK安装路径下的inclue和lib文件夹,用户在使用时只需将编译和运行的平台选择为Windows Mobile 6的相应平台即可。Windows Mobile 6 SDK使用两个不同的版本以区分具有触摸屏的设备和不具有触摸屏的设备。使用 Windows Mobile 6 Professional SDK 为具有触摸屏的设备开发应用程序,这些具有触摸屏的设备过去称为 Pocket PC。使用 Windows Mobile 6 Standard SDK 为不具有触摸屏的设备开发应用程序,这些不具有触摸屏的设备过去称为 Smartphone。Windows Mobile 6 SDK中提供了许多项目实例,这些项目代码只要不涉及到触摸屏的设计,在Standard和Professional两大平台上是通用的。103.2 PC环境配置PC上开发蓝牙应用程序的配置要求较低,由于使用微软本地蓝牙堆栈进行开发,所以硬件方面需要有一块即插即用的蓝牙适配器。英国CSR芯片 XP系统免驱动即插即用,它在全球广泛应用,是最早直接使用系统蓝牙驱动的芯片,是系统驱动下兼容性最出色的芯片。该蓝牙芯片内部带有EDR功能(蓝牙的闪存)用于存储地址码,使蓝牙的地址码是不相同的一组,提高了蓝牙的识别效率,带动整体性能提升。3.2.1 开发平台目前市场上主流的蓝牙芯片中broadcom和ISSC分别采用IVT和 Widcomm各自独立开发的协议栈和管理应用程序,来配合蓝牙外设在 Win32 平台上的使用。只有CSR 2.0芯片是即插即用的,可以直接使用微软本地堆栈协议进行蓝牙通信。11软件的开发我选择使用Visual C+ 6.0,用以编写Win32控制台应用程序。Visual C+ 6.0中已经包含了基于套接字编程的相关类库,加之其功能精简便于操作修改,面向开发包的设置也较为简单,为PC平台上的软件设计提供了便利。3.2.2 开发包PC端的开发包使用Microsoft Windows Server 2003 R2 Platform SDK,它提供了开发在 Windows 2000、Windows XP 和 Windows Server 2003 R2 上运行蓝牙应用程序所需的头文件、库和工具,是面向Visual C+ 6.0平台的最后一款开发包。其包含文件和库文件的配置需要手动完成。PSDK 2003中也提供了开发蓝牙程序所需的文档、示例,这个示例实现的是两台PC之间的蓝牙通信,在对SDK中蓝牙结构体下的端口进行设置以及运行时的模式选择之后可实现PC机之间的互联和简单的字符串信息的互发。12第4章 软件设计4.1 软件流程图本软件所用的套接字通信机制流程如图4.1所示图4.1套接字程序流程图4.2 客户端设计进行windows编程时使用的是Visual C+ 2005提供的工具。Visual C+ 2005提供的项目创建工具可以自动生成包括基本windows程序在内的各种应用程序的骨架代码。创建项目是用Visual C+ 2005开发任何应用程序或组件的起点。与典型的从命令执行的控制台程序相比,windows程序具有不同的结构,而且更复杂。在控制台程序中,我们可以得到来自键盘的输入,并将输入直接写回到命令行,但windows程序只能利用windows操作系统提供的函数来访问计算机的输入和输出设备,直接访问硬件资源是不允许的。因为在windows下面可能同时有多个程序在运行,所以windows必须确定给出原始输入是针对哪个应用程序的,然后相应通知有关程序。因此,windows操作系统首先要控制与用户的所有通信。另外,用户和windows应用程序之间的界面本质是:任何给定时刻通常都可能有各种不同输入。用户可能选择许多菜单选项中的任意一个,可能单击某个工具栏按钮,或者在应用程序窗口的某个位置单击鼠标。这些用户动作首先被操作系统收到,并且统统被windows认为是事件。应用程序用户界面中发生的事件通常将导致执行一端特定程序代码。因此,程序的执行过程是由用户的动作序列决定的。这种方式工作的程序被称为事件驱动程序,它们与只有单一执行顺序的传统过程化的程序不同。过程化程序的输入是由程序代码控制的,而且只能发生在程序允许它发生的时候。所以说,windows程序主要是由响应事件的代码段组成的,而这些事件是由用户动作或windows本身引起的。当然,为各种外部事件,比如选择菜单或单击鼠标提供服务的模块,通常都可以使用具体程序中共用的一组因应用而异的数据。这种应用数据包含与程序正在做的事情有关的信息,比如编辑器中的文本块或者记录,还包含与程序执行过程中发生的某些事件有关的信息。这种共用的数据集合使看起来独立的程序的不同部分能够相互通信,并以协作和整体的方式进行工作。13本小节主要介绍程序设计中较为重要的API函数和结构等。4.2.1 用户界面 用户主界面程序流程如图4.2所示图4.2 用户主界面程序流程图首先定义全局唯一标识符strGUID和描述SDP的文本信息,GUID 是一个 128 位整数(16 字节),可用于所有需要唯一标识符的计算机和网络。此标识符重复的可能性非常小。会话描述协议(SDP)为会话通知、会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述。SDP信息是文本信息,采用UTF-8编码中的ISO 10646字符集。SDP会话描述采用数组的方式 ,其成员参数可表示协议版本、会话标识符、会话名称、URI 描述、连接信息、带宽信息等内容。14 使用DialogBox函数宏观地从对话框模板资源创造了一个模态对话框。该函数如果执行成功,在访问EndDialog函数过程中会返回一个nresult参数,由某个指定的回调函数终止了模态对话框。这个DialogBox宏观地使用DialogBoxParam函数。该窗口的主要功能有:通过下拉列表框显示搜索到的蓝牙设备,通过文本框输入需要发送的信息,由Button控件调用申请连接和发送的函数以及显示接受到的信息和调试错误。用于主窗口消息处理的回调功能由MainDlgProc函数完成,该函数通过对传入的message参数进行判断而执行相应的动作。CreateThread函数创建一个在访问当前进程的虚拟地址空间下可执行的线程。它传入的参数主要有:一个指向SECURITY_ATTRIBUTES结构体的指针,以决定所返回的句柄是否能够被其子进程继承;一个堆栈的容量;一个指向线程起始地址的指针;一个指向能够被传递给线程的变量的指针;一个控制线程创建的标志位;一个指向能够收到线程标识符的变量的指针。该函数如果调用成功,将返回一个标识新线程的句柄值。操作系统可以给窗口传消息,窗口之间也可以互通消息,当然窗口也可以发消息给自己。消息的格式是由一个32位的消息代码再配上两个32位的参数,具体调用形式为:LRESULTSendMessage(HWNDhWnd, UINTMsg, WPARAMwParam, LPARAMlParam);4.2.2 遍历程序中主窗口通过调用ShowDevices函数遍历并显示周围的蓝牙设备,这个函数又是通过调用DiscoverDevices函数进行蓝牙搜索,并获得所需设备信息的。首先必须调用初始化查询函数WSALookupServiceBegin。函数原型如下:INT WSALookupServiceBegin( _in LPWSAQUERYSET lpqsRestrictions, _in DWORD dwControlFlags, _out LPHANDLE lphLookup);第一个参数是WSAQUERYSET结构中的dwNameSpace设置为NS_BTH,dwControlFlags参数设为0x0002,最后一个参数lphLookup是查询操作的句柄。开始查询蓝牙设备使用:INT WSALookupServiceNext( _in HANDLE hLookup, _in DWORD dwControlFlags, _inout LPDWORD lpdwBufferLength, _out LPWSAQUERYSET lpqsResults);hLookup参数就是初始化时返回的句柄,dwControlFlags说明需要查询的是什么信息,lpdwBufferLength表示缓存区的大小,最后一个参数指向WSAQUERYSET结构,WSAQUERYSET结构中需要再次将dwNameSpace设置为NS_BTH。反复调用WSALookupServiceNext函数就能遍历取得附近所有蓝牙设备的信息。4.2.3 连接本软件的客户端通信功能通过主界面调用Senddata函数实现,该函数流程如图4.3所示图4.3 Senddata函数流程图继续通过调用SendMessageToServer函数(如图4.4所示)可实现Winsock客户端通信模式。图4.4 SendMessageToServer函数流程图基于蓝牙技术开发应用程序可以使用WinSocket接口方式。一般流程为客户端创建一个socket连接,连接到一个已知的服务端通道上,通过SDP查询得到服务器的通道信息,然后就利用此通道发送数据。首先创建socket:SOCKET WSAAPI socket( _in int af, _in int type, _in int protocol);对于函数socket 我们还没有指定我们要连往什么其它(主机)系统,我们新建的套接字还是未连接的。这个函数将返回一个SOCKET 类型的值,FreeBSD从和文件句柄相同的池中分配它的值。这就是允许套接字被以对文件相同的方式处理的原因。参数AF_BT告诉系统你需要使用什么协议族。有许多种协议族存在,有些是某些厂商专有的,其它的都非常通用。协议族的声明在 sys/socket.h中。对于参数type有五个定义好的值,也在sys/socket.h中。这些值都以 “SOCK_”开头。 其中最通用的是SOCK_STREAM, 它告诉系统你正需要一个可靠的流传送服务(和PF_INET一起使用时是指 TCP)。如何你需要处理基层协议(例如IP),或者甚至是网络接口(例如,以太网),你就需要指定 SOCK_RAW。最后,参数protocol取决于前两个参数,并非总是有意义。在以上情形中,使用取值0。创建后可以使用connect函数进行连接服务器:int connect( _in SOCKET s, _in const struct sockaddr *name, _in int namelen);Connect函数连接到目标设备的name参数指向SOCKADDR_BTH结构:typedef struct _SOCKADDR_BTH USHORT addressFamily; BTH_ADDR btAddr; GUID serviceClassId; ULONG port; SOCKADDR_BTH, *PSOCKADDR_BTH;需要注意的是该结构中的端口port需设置为非0,且与服务器一致,在本程序中我将其设为3。4.2.4 发送连接成功后,就可以发送数据了。该过程由send函数实现:int send( _in SOCKET s, _in const char *buf, _in int len, _in int flags);第一个参数是连接成功后,由服务器创建的新的socket,第二个参数为发送缓冲区,第三个参数表示缓冲区的容量,flag参数标识本次发送的方式。4.3 服务器设计起初我希望能够在同一平台上开发服务器程序,但由于与visual studio 2005匹配的windows mobile 6.0 SDK不包含可在PC上运行的服务器部分, PSDK 2003是为VC 6.0服务,而平台移植又存在诸多问题,故选择直接使用VC 6.0开发。VS2005与VC 6.0的区别在于前者使用虚拟C+,原先的那些C+库文件名都去掉了.h ,VC 6.0默认以多字节字符集进行编译。但VS2005使用unicode字符集进行编译。不同编译平台的代码移植(这里指从低版本的编译器往高版本的编译器之间的代码移植),其移植成本主要由两方面组成,一是系统库的变化产生的成本,如API函数的变化和类成员函数的变化;二是由于在低版本编译器写出的不规范的代码产生的成本(一般而言,高版本的编译器对程序语法的检查更加严格)。分析一下这两方面的成本,前者是我们第三方开发者不可控制的,后者是我们可以控制的,而且后者产生的编译错误更多,花费的时间更多。PC部分API程序主要是开发蓝牙应用组件,这些程序运行于Windows操作系统之上,提供了USB和串口驱动程序,应用程序函数接口(API)等,具体可分为PC端口初始化、蓝牙通信参数设定、蓝牙通用外接模块控制、HCI指令封装、数据信息处理等几个部分。15 服务器端程序流程如图4.5所示图4.5服务器端程序流程图4.3.1 连接在利用套接字编程时,第一步需要加载套接字库,这通过WSAtartup函数来实现。该函数有两个功能:一是加载套接字库,一是进行套接字库的版本协商,也就是确定将使用的socket版本。该函数的原型声明如下所示:int WSAStartup( _in WORD wVersionRequested, _out LPWSADATA lpWSAData);wVersionRequested用来指定准备加载的Winsock库的版本。高位字节指定所需要的Winsock库的副版本,而低位字节则是主版本。lpWSAData是一个返回值,指向WSADATA结构的指针,WSAtartup函数用其加载的库版本有关的信息填在这个结构中,本程序中使用2.2版本。加载了套接字库后,就可以调用socket函数创建套接字了,该函数的原型及使用原理与客户端相同。创建了套接字之后,应该将该套接字绑定到本地的某个地址和端口上,这需要bind函数来实现:int bind( _in SOCKET s, _in const struct sockaddr *name, _in int namelen);第一个参数指定要绑定的套接字;第二参数指定了该套接字的本地地址信息;第三个参数指定该地址结构的长度。Listen函数的作用是将指定的套接字设置为监听模式:int listen( _in SOCKET s, _in int backlog);参数s是套接字描述符;第二个参数是等待连接队列的最大长度。如果设置为SOMAXCONN,那么下层的服务提供者将负责将这个套接字设置为最大的合理值。一旦有来自客户端发来连接申请,将由accept函数接受此请求:SOCKET accept( _in SOCKET s, _out struct sockaddr *addr, _inout int *addrlen);参数 s是套接字描述符,该套接字已经通过listen函数将其设置为监听状态;addr是一个指向缓冲区的指针,该缓冲区用来接收连接实体的地址,保存发起连接客户端的IP地址和端口信息;第三个参数返回包含地址信息的长度。Accept函数如果成功将返回一个新的套接字,该套接字将专门为发起连接的这个客户端服务。4.3.2 接收Windows Sockets的recv函数从一个已经连接的套接字接受数据。int recv( _in SOCKET s, _out char *buf, _in int len, _in int flags);recv函数有四个参数,其中第一个参数s是建立连接之后准备接收数据的那个套接字;第二个参数buf指向缓冲区,用来保存接收的数据;参数len是缓冲区的长度;第四个参数与客户端send函数的第四个参数类似,通过设置这个值影响这些函数调用的行为。一旦accept函数返回一个新的套接字之后,可以通过循环使用recv函数实现多次数据接收。本软件将由接收到的字符a、b、f、e分别触发按键功能,对于其他接收到的信息将不做处理,直接显示在控制台。4.3.3 模拟按键模拟键盘我使用Keybd_event这个API函数:VOIDkeybd_event(BYTEbVk,BYTEbScan,DWORDdwFlags,PTRdwExtraInfo);Keybd_event能触发一个按键事件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消息。当然也可以用产生这两个消息来模拟按键,但是没有直接用这个函数方便。Keybd_event共有四个参数,第一个为按键的虚拟键值,本软件需要模拟键盘上的UP、DOWN、F5和ESC按键,所以分别将这个参数设为VK_UP(0x26)、VK_DOWN(0x28)、VK_F5(0x74)和VK_ESCAPE(0x1B)。第二个参数为扫描码,一般不用设置,用0代替就行;第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成“KEYEVENTF_KEYUP”,第四个参数一般也是置0即可。以向上箭头为例,本函数调用过程如下所示:void SetUpArray( void ) keybd_event( VK_UP, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 ); keybd_event( VK_UP, 0x45, KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP, 0);其中第一次调用为模拟按下向上箭头,第二次调用为释放该键,若不释放,则该动作将一直持续下去。4.4 错误代码及解决方法如果通信过程中某一步骤失败,则可通过调用WSAGetLastError函数返回error code(见表4.1)。表4.1 error codeerror codeDescriptionWSAEBADF 10009File handle is not valid.WSAEACCES 10013Permission denied.WSAEWOULDBLOCK 10035Resource temporarily unavailable.WSAENOTSOCK 10038Socket operation on nonsocket.WSAEPROTOTYPE 10041Protocol wrong type for socket.WSAEADDRINUSE 10048Address already in use.WSAECONNABORTED 10053Software caused connection abort.WSAECONNRESET 10054Connection reset by peer.本软件在设计及调试过程中主要遇到的错误主要为WSAEADDRINUSE 10048和WSAECONNABORTED 10053。前者产生的原因是由于只有一个使用的套接字地址(协议/IP地址/端口)是被允许的,如果一个程序试图把套接字绑定在一个已被作现有的活动中的或者正处在关闭过程中的套接字所占用的IP地址/端口。对服务器应用程序需要绑定多个套接字到相同编号的端口。而客户端应用程序通常不需要访问绑定程序连接程序将自动选择一个未被使用的端口。若此时绑定函数被一个通配符地址访问,在一个特定地址被访问后,就会返回这个错误代码。经过分析,我发现客户机和服务器的程序需要对SOCKADDR_BTH内部参数进行设定。SOCKADDR_BTH sa;sa.addressFamily = AF_BT;sa.serviceClassId=ServerGuid;sa.port=3;其中端口这一项默认值为0,而作为PC机,其COM0端口一直作为通用串口而被占用,所以我首先将服务器端的端口值该为3。考虑到客户端的端口必须与服务器一致才能通信,故又做了相应修改。完成后不再返回此错误并可实现connect与accept函数的对接,为数据传输打下基础。第二个错误产生的原因在于建立的连接被主机上运行软件的所终止,可能是由于一个数据传输超时错误或协议而引起的。对于本软件,主要是由于在使用编写的程序进行蓝牙通信的同时,还通过ActiveSync使手机与PC进行了蓝牙连接,而这个连接占用了通信端口,断开此连接后,就能通过程序进行正常通信了。第5章 软件调试与测试5.1 客户端调试程序编写调试链接成功后,确保手机与Visual Studio 2005完成连接并可以识别,然后将运行平台选为Windows Mobile 6.0 professional,即可直接在手机平台上运行。执行过程中,如果遍历执行成功则会显示”Scanning Completed. Select a device.”否则显示 Scanning failed.。若连接和发送等步骤出现错误,在接收信息栏都会有相应的错误代码和错误提示,经实际测试,该程序可实现两部手机之间识别、互连和数据收发,有效范围56米,正确率高,传输速度快。客户端调试结果如图5.1所示图5.1手机端运行结果图5.2 服务器调试PC端代码编译前需将字符类型设为多符号型,并在预编译的头文件选项中选择不使用预补偿页眉,最后在链接时在对象库模块中添加ws2_32.lib库。安装好蓝牙适配器并与手机通过密码认证后就可以运行了。由于程序是通过控制台运行,比较直观,便于单步执行。当一台PC作为客户端输入blue.exe -n或-a -c -o指定目标服务器进行通信,并设定申请次数和显示信息的情况。而另一台PC通过输入blue.exe -c -o可实现服务器的功能。我在socket、bind、listen、accept等一些重要函数调用之后都使用printf语句输出执行结果。经实际测试,该程序可实现两台PC之间的互连,和一个长字符串的收发。PC端调试结果如图5.2所示图5.2 PC端运行结果图5.2 联合调试将两段程序中SOCKADDR_BTH结构体内的port值都修改为3编译生成后即可完成本课题无线遥控PPT播放的功能(如表5.1所示)表5.1功能对照表手机发送PC模拟a上翻一页b下翻一页f开始放映e退出放映联合调试结果如图5.3所示图5.3系统运行结果图结论本文研究开发了基于蓝牙无线通信网络的PPT遥控播放软件,通过程序编写和软件测试,表明该软件的用户接口简洁友好,蓝牙无线通信网络传输数据稳定可靠,PC服务器程序能实时接受数据并做出正确响应。蓝牙产品的开发重在有特色的应用,在本地蓝牙协议堆栈的基础上进行外围设备的开发和上层软件的编写,可以大大地缩短产品的开发周期,为各种蓝牙应用奠定了基础,从而方便地实现产品的蓝牙无线通讯。因此,该软件具有推广价值和电子消费市场价值。为Mobilesync系列软件开发提供了研究雏形。目前基于蓝牙技术的产品开发,正在短距离无线通信中显示出一股强劲的势头,蓝牙技术的大发展期必将很快的到来。通过本课题的研究,我学会了使用socket机制进行通信程序开发,掌握了winAPI函数以及开发包的使用方法,建立了类继承、重写等面向对象编程的概念,此外对蓝牙堆栈也有了更深层的认识。参考文献1 Brent A.Miller,Chatschik Bisdikian.蓝牙核心技术M.北京:机械工业出版社,20012Mark Hapner,Rich Burridge.Java消息服务API参考指南-J2EE平台的消息传递J.北京:清华大学出版社,20023David Kammer.Gordon McNutt,Brian Senese,Jennifer Bray.蓝牙应用开发指南-近程互联解决方案J.北京:科学出版社,20074Zhi Zhang, Ping Liu. Application of Bluetooth Technology in Ambulatory Wireless Medical MonitoringJ/OL. 2008 4th International Conference on Microwave and Millimeter Wave Technology Proceedings: IEEE, 18-21 Aug. 2008 Page(s):9
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 我在未来等你(说课稿)2023-2024学年初三下学期教育主题班会
- 水利安全生产信息化建设与智能化监控系统
- 刮大白工种考试题及答案
- 生命教育中的家长作用与社区支持系统建设
- 工地井架考试题及答案大全
- 福州专升本考试题目及答案
- 放射技术考试题型及答案
- 2025联盟型合作协议模板
- 绿色建筑施工中碳排放管理的难点
- 电力工程建设项目质量风险管理与保障措施
- 家庭教育中的生活技能
- 太原市房屋租赁合同
- 长鑫存储校招在线测评题库
- 网络安全课件下载
- “城镇可持续发展关键技术与装备”重点专项2024年度项目申报指南(征求意见稿)
- 铜仁市大学生乡村医生专项计划招聘考试真题
- 光伏项目投标方案(技术方案)
- 模块化炼化设备的设计与集成
- 光伏发电功率预测系统
- HY/T 0404-2024潮流能、波浪能发电装置海试过程控制规范
- 设备维护服务方案(2篇)
评论
0/150
提交评论