设计基于SymbianOS的通信软件.doc

上传人:精*** 文档编号:1129631 上传时间:2024-09-05 格式:DOC 页数:51 大小:663.91KB
下载 相关 举报
设计基于SymbianOS的通信软件.doc_第1页
第1页 / 共51页
设计基于SymbianOS的通信软件.doc_第2页
第2页 / 共51页
设计基于SymbianOS的通信软件.doc_第3页
第3页 / 共51页
设计基于SymbianOS的通信软件.doc_第4页
第4页 / 共51页
设计基于SymbianOS的通信软件.doc_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、摘要摘要随着IC技术的发展,手机的存储空间越来越大,可供手机使用的软件也越来越多,手机的功能越来越丰富,拥有了很多电子设备的功能。如:数码相机,数字多媒体播放器、邮件终端、甚至电子支付卡。智能化、业务综合化将是手机发展的必然趋势。本论文主要阐述个人在设计基于Symbian OS的通信软件过程中的理念;同时,阐述了个人对于Symbian OS系统架构的了解以及对于Symbian OS系统提供的各种通信方式的了解。论文同时说明个人设计基于Symbian OS的通信控制软件的总体架构、具体实现软件分解后的各个模块的实现方法和作用。【关键词】:Symbian 操作系统,体系结构,蓝牙模块,Wi-Fi模

2、块,文件传输机制IABSTRACTAs the IC technology, mobile phones more and more storage space for your mobile phone software more and more cell phones will have more, with a lot of electronic devices.Such as: digital cameras, digital multimedia player, e-mail terminal, or electronic payment cards.Intelligence, b

3、usiness integration will be the development trend of mobile phones.Described in this thesis in the design of personal communications software based on Symbian OS to the idea of the process; the same time, set a personal framework for understanding the system Symbian OS and Symbian OS system provides

4、 for various means of communication, understanding.Paper also indicate that the individual design is based on Symbian OS to the general framework of communication control software, specifically for software decomposition methods to achieve the various modules and functions.Key Words: Symbian OS,arch

5、itecture,Bluetooth module,Wi-Fimodule,file transfermechanism目录目录摘要IABSTRACTII第1章 引言11.1 课题背景11.2 研究意义1第2章 总体需求与设计32.1 软件设计过程32.2软件功能描述32.2.1 功能模块划分分析4第3章 开发工具分析63.1 开发工具选择63.2 应用软件开发基本步骤7第4章 File browser 模块104.1 File browser模块实现104.2 活动对象简要介绍11第5章 数据通信模块实现145.1 控制端部分模块的实现145.2受控端部分模块的实现195.3 蓝牙模块设计2

6、15.3.1 蓝牙模块设计分析225.3.2蓝牙服务的发布235.3.3 蓝牙设备的搜寻245.3.4蓝牙服务的搜寻245.3.5蓝牙套接字通信255.4 蓝牙协议简介255.4.1 蓝牙协议栈体系结构255.4.2 蓝牙传输网络265.5 Wi-Fi模块设计27第6章 用户界面(UI)模块设计30第7章 背景知识补充总结337.1 常见手机操作系统337.2 各手机操作系统简介337.2.1 Windows Mobile操作系统337.2.2 Linux及基于Linux内核的Android手机操作系统337.2.3 iPhone MacOS 手机操作系统337.3 Symbian OS手机操

7、作系统简介347.3.1 Symbian 操作系统简述347.3.2 Symbian OS series 简述34结束语36参考文献37致谢38附录 Symbian OS C+语言规范39Symbian程序编程规范和数据类型39描述符规范40外文资料原文42翻译45IV第1章 引言第1章 引言1.1 课题背景随着移动通信技术的快速发展,人类已经进入一个信息化的社会,嵌入式操作系统以及嵌入式CPU技术的快速发展使智能手机成为其主要应用之一。人类通信进入一个高速发展的时期。同时,随着硬件的快速发展,智能手机愈加在社会上普及。随着3G标准和Wi-Fi以及更多其它通信方式在中国的推广,国内的手机用户有

8、了更多的通信方式可以选择。同时,用户对手机的要求已经不再局限于通话、短信等基本功能,已经扩展到更高层次:如拍照、影音、文件共享等。同时,随着SNS在全球的广受欢迎,社交功能也得到了重视,利用手机实现一定范围内的短距通信可以方便这种功能的实现。手机硬件标准越来越高,手机游戏成为可能;手机游戏越来越高级,实现手机之间互联可以方便不同用户完成手机游戏之间的沟通,使得游戏更具趣味性。手机软件开发过程中,搭建好开发环境后,由于现在智能手机搭载的手机操作系统提供了大量使用的API使得开发过程大大简化,也使得开发出的软件具有更好的性能。1.2 研究意义近些年来智能手机在应用上不断完善,提高了对多媒体、照相、

9、绘图、GPS等功能的支持。而技术的进步和工艺的完善又使得手机价格降低,从而使智能手机由高端的小众市场,逐渐地转向了大众,吸引了更多关注的目光。智能手机的操作系统对智能手机的发展起着至关重要的作用,因此,对智能手机操作系统的研究意义重大。常见的智能手机操作系统有:Symbian、Linux、Windows Mobile等。强大的市场占有率使得Symbian成为应用范围最大的智能手机操作系统。Series60(简称S60)是智能手机中使用最广泛的用户平台,因此,对基于Symbian OS的S60平台软件开发就显得更加具有重要意义。而手机通信技术的蓬勃发展,也使得各种各样的通信协议层出不穷,同时,各

10、种手机通信方式不断应用于手机,所以开发一个基于Symbian OS系统的通信控制软件可以方便使用者使用智能手机,为其提供方便。1第2章 总体需求与设计第2章 总体需求与设计随着各种通信方式不断应用于手机,使得人们在使用手机时候有多种方式可以选择,本软件的设计思想就是一个基于广受欢迎的Symbian操作系统的集成多种手机通信的控制软件,不光能方便人们使用各种通信方式,同时,利用该软件自带的功能也能简化用户选择需要传输的文件的过程。本章通过分析总体需求和设计目标,提出了总体设计方案,根据系统的功能将系统划分为不同模块。本章描述完设计方案后,对各部分的设计进行了详细地介绍,并且在各章分别介绍各个不同

11、模块。2.1 软件设计过程整个软件的设计思路如图2-1所示: 图2-12.2软件功能描述本软件论文的目标是介绍借助于手机已经嵌入于手机的Bluetooth或者Wi-Fi等的通信方式实现一个实现方便处理手机间的文件或信息传输的应用软件,以增强手机的应用功能以便实现两个或者多个手机间通过Bluetooth或者Wi-Fi等通信方式进行通信,同时能进行手机之间的文件传输。可以将功能分解为:1.目录显示和文件查找功能:实现手机通信方式连接前的file browser功能,即在手机连接前,用户能浏览可通过软件实现对手机本身内存或存储卡上文件的目录;提供被传输的文件的查找操作提示,指定传输的文件;2.通信方

12、式集成功能:开启软件后,提供集成的不同通信方式以便用户选择使用选择通信模式;为用户指定通信方式提供操作界面;3.控制功能:负责将文件打开,提取文件字符串,并按照一定的帧格式组帧,然后发送;4.传输过程中对于传输进度进行显示,使得过程一目了然,在用户界面上更友好更方便。软件功能流程如图2-2所示:图2-22.2.1 功能模块划分分析根据软件的需求,可以将本软件的功能模块分为以后几部分,如图2-3所示:1.File browser模块。用以实现通信前传输文件的选择;2.通信模块:分为蓝牙引擎模块和Wi-Fi引擎模块;主要功能为实现数据的收发接送;4.用户界面即UI模块。用以实现软件的UI的模块;图

13、2-3此软件不光是为了实现控制各个通信方式的使用,更重要的是,开发过程中,各个软件的模块是以引擎的方式架构的,也就是说,软件的各个模块可以在将来直接扩展其他功能。第3章 开发工具分析3.1 开发工具选择工欲善其事必先利其器,在做好软件设计的总体架构后,需要部署开发软件的开发平台环境以及了解基于Symbian OS的手机应用软件开发的基本步骤。现在流行的多种手机操作系统中,支持的编程语言各种各样,开发环境也各不相同,如:WindowsMobile的C#+VisualStudio,Android的Java+Eclipse组合,iPhone的Object-C +MacOS+XCode组合等。由于开发

14、Symbian OS的应用程序使用的是Symbian C+语言,而Symbian C+采用C+标准,所以可选择的开发环境很多,例如:微软的Visual C+ 6.0、Borland C+ BuilderX Mobile Edition 还有Metrowerks CodeWarrior。但是微软的Visual C+ 6.0 缺乏人性化的设计,VS.NET不能很好地支持Symbian OS/C+的开发,Borland C+ BuilderX Mobile Edition还有Metrowerks CodeWarrior也并非主流工具。幸运的是不久前Nokia推出了Carbide.vs,使得开发Sym

15、bian OS/C+的应用程序变得非常方便与简单。Carbide.vs并不是一个类似 VS.NET或Codewarrior 一样的IDE开发环境,Carbide.vs是一个插件,一个能够处理Symbian OS SDK命令行并改善VS.NET编写的Symbian OS C+ 应用程序代码的一个插件,同时Carbide.vs也很好地集成到了VS.NET的IDE开发环境中,有了Carbide.vs使得编写起Symbian os c+应用程序将会变得更容易、更方便、更快捷。 出于方便性,开发本软件过程中,个人选择了VisualStudio.Net2003+Carbide.vs的组合,开发过程中Vis

16、ualStudio.Net2003+Carbide.vs显示出强大功能,使得开发过程更便捷快速。接下来就介绍具体步骤:安装Microsoft Visual Studio.Net 2003 :这个是必备的IDE,我们将会使用VC+.NET 2003进行Symbian os c+的开发,所以VC+.NET是必装项目;Java JRE:Carbide.vs和Symbian os 的SDK都要求要Java JRE的运行环境 ,不然无法安装,请到 下载最新版本的JRE;ActivePer:必备的软件 for Windows(X86);47第3章 开发工具分析Symbian OS Series 60 SD

17、K:这个是最重要的,SDK自带了Symbian 的手机模拟器与编译连接环境,至于选择哪个版本的SDK要具体看开发的手机机型 (如果不清楚要选择哪个SDK的话,请到 查看机型对应的SDK并进行下载)。我开发的软件是面向 Series 60 第三版的SDK;Carbide.vs:此次开发Symbian OS软件必备的插件,可在 选择Carbide.vs下载;6.安装诺基亚PC套件。PC套件指的是由NOKIA公司开发的手机和计算机相连的一套驱动程序。用于Symbian手机和电脑之间进行信息传输。数据线的电脑端接口为USB接口,手机端接口视手机型号而定。下载地址: 3.2 应用软件开发基本步骤在使用V

18、isual StudioNet 2003开发环境建立Symbian项目后,开发环境将提供应用程序框架。应用程序框架由一套核心类组成。主要包括:(1)应用类(Application):该类用于定义应用程序的属性,还用于生成新的空白文档,以及传递应用程序的UID(Unique Identifier)信息;(2)文档类(Document):该类表示应用程序的数据模式,负责保存和恢复应用程序的数据,以及创建应用程序的用户UI接口;(3)应用接口类(AppUi):该类是应用程序的用户接口类,它创建多个应用程序视图,并且处理程序和用户的信息交互,比如处理应用程序的菜单和键盘事件,分别在HandleComm

19、andL()和HandleKeyEventL0i函数中实现对应事件的处理;(4)视图类(View)和控件容器类(Container):它们提供应用程序操作界面。其中,视图类提供对视图菜单及键盘事件的处理,控件类包含界面控件。Symbian使用MVC(ModelViewController)架构来搭建控件,这种模式的特点是在AppUi类与Container类之间增加一个AppView的类,即一个AppUi对象,多个AppView和Container对象。这里,AppView对应控制器,Container对应视图,AppUi对应于Model。应用程序框架初始化时,需要以下步骤:(1)执行框架入口函

20、数E32Main0;(2)创建应用程序实例。框架调用NewApplication0,创建应用程序类的一个实例,并返回它的指针,以后框架使用该指针完成应用程序的创建。这里在堆上创建应用程序实例时,使用的是new方法而不是new(ELeave)方法,这是因为TRAP harness(陷阱捕捉)这时还没有创立。如果系统不能为新的实例分配内存,那返回的指针就是NULL,应用程序框架能够检查到并处理这个问题;(3)返回UID。由框架调用AppDllUid()i函数返回应用程序的UID。该函数必须返回在幸mmp文件中指定的UID值,该值可用于确定应用程序的实例是否正在运行。如果一个应用程序正在运行,而要启

21、动这个程序的另一个实例,这时当前实例将被切换到前台,而不是重新启动另一个实例;(4)创建文档实例。框架通过调用CreateDocumentL()函数,获取指向新创建的Document类实例的指针。通过文档实例指针,框架就可以调用文档实例的某些功能,同时文档实例也通过调用自身两阶段构造函数来创建自己:(5)是否装入文件。框架重新调用AppDllUid0来观察是否要从文件系统中装入一个文件:(6)创建接口类实例。框架通过调用文档对象的CreateAppUiL0方法生成了一个AppUi实例,并获取指向它的指针。此处AppUi实例创建自身时使用的是C+的默认构造函数并返回实例的指针,之后框架通过这个指

22、针调用AppUi实例的ConstructL()函数来完成构造。而在这个ConstructL()函数中首先调用的是AppUi基类的BaseContructL()函数,处理了读入与该程序相关的资源的事宜;(7)创建视图类实例。接口类的ConstructL()函数将通过new(ELeave)方法创建视图类,初始化视图类时,将使用清理栈,防止内存泄露。如果不止一个视图,则需要调用AddViewL()函数将新建的视图类实例加载进来,并通过SetDefaultViewL0函数设置缺省的默认视图;(8)重绘视图类。通过以上的创建过程,框架已经拥有了View的无限调度权利。程序启动、应用程序获得焦点以及选项菜

23、单消失等事件发生时,框架可以通过窗扣服务器调用View的Drawoi函数,进行绘制工作。需要注意的是,编程开发者并不能直接调用Draw(),它要求在调用前系统的graphics context处于激活状态,如果编程开发者希望进行屏幕的重绘,则只能调用DrawNow0方法。另外,Draw()函数不能异常退出,这是因为该函数能被框架直接调用,而框架是不知道如何处理可能发生的异常的。因此Draw自己需要捕捉和处理可能发生的错误;(9)处理命令:完成以上步骤后,用户可以通过比如菜单选项之类的交互UI使框架调用HandleCommandL0函数,并传递一个参数aCommand,它指明了用户所选择的命令,

24、HandleCommandLO会据此来判断不同的命令以分别调度执行。在此处还有一个必须注意的地方是如果要程序的View实例也回应用户的按键,则必须将View实例通过AppUi的AddToStackL()函数加入到AppUi实例的控件堆栈(control stack)eg。通过以上对应用程序框架初始化步骤后,一个完整的框架将创建完毕。使用Visual StudioNet 2003进行应用程序开发时,需要以下步骤:(1)创建Symbian项目。通过集成开发环境的“文件【新建】项目菜单,选择“New Symbian OS选项,创建Syrnbian项目。此时,开发环境将创建应用程序框架。其中,宰mmp

25、文件提供项目文件相关属性说明,*hrh文件定义菜单、控件等资源ID(Identifier),*rss文件描述用户界面(UI,UserInterface)所包含的组件;(2)添加库文件。编写代码时,若需要使用Symbian的一些库文件,可以在ComScrvcrmmp文件中进行添加相应的库文件,之后重新加载一次项目(Import Symbian Project),即可添加成功。或者,在Visual StudioNet 2003开发环境中,选择项目属性的链接器选项中,在附加依赖项栏添加库文件;(3)配置项目的SDK使用权限。使用SDK的某些API函数时,需要配置项目的SDK使用权限。在Visual

26、StudioNet 2003开发环境中,选择“【项目】【EditCapabilities】选项,可配置项目权限。使用相机功能时,需要选择UserEnvironment选项,使用网络功能时,需要选择NetworkServices选项;(4)安装文件签名。项目生成成功后,将生成安装文件(*sis)。由Visual StudioNet 2003生成的安装文件,一般还需要先进行签名(SignSis)才可以在手机上运行,否则会因为使用权限不足而无法运行。开发人员可以使用makekeys命令制作签名。该签名支持基本权限:LocalServiees、UserEnvironment、NetworkServic

27、es、ReadUserData、WritcUscrData,更高的权限将不被支持。本软件使用照相机、套接字网络通信等功能,只需使用到SDK的基本权限即可;(5)下载并安装。可使用数据线,将手机与电脑USB口相连。通过PC套件同步后,双击安装文件,即可下载到手机并开始安装。安装成功后即可运行。第4章 File browser 模块设计4.1 File browser模块实现File browser模块主要提供软件启动后,用户对文件的预览、读写、列出文件目录等功能。Symbian OS是一种成熟的手机操作系统,同时也为手机软件开发者提供了很多有用的成熟的API,同样,在文件操作上,Symbian

28、OS为开发者提供了很多便利。File browser模块定位于提供一个可靠的异步服务,而Symbian OS本身就具备这样一个服务:File(文件)服务器。Symbian OS文件服务器提供使用户程序能够操作驱动器、目录和文件以及在文件中读写数据的基本服务。Symbian OS设计之初,服务器/客户端设计理念就始终贯穿其中。文件服务器使用基于会话的通信,将客户端操作转换为发送给服务器的消息。请求的函数在服务器中执行,然后将结果传回客户端,因此为了使用文件服务器,首先需要已连接的文件服务器会话,它由RFs类的实例表示。使用文件服务器的通用模式如下:RFs session;Session.conn

29、ect( );Session.close( );在连接和关闭RFs之间,可以使用它打开任意数量的文件或目录,或执行其他与文件相关的操作。也可以在应用程序的生存期保持文件服务器会话打开。在关闭会话之前,确保正确关闭基于文件的所有打开资源。任何情况下,当关闭会话时,服务器将清除所有与会话关联的服务器端资源。在栈上声明文件服务器会话,此时需要将该会话放在清除栈上,最好的方法是使用清除栈的ClaeanupClosePushL( )。如下所示:RFs myFs;User:LeaveIfError (myFs.connect( ) );CleanupClosePushL(myFs);第4章 File br

30、owser模块设计CleanupStack:PopAndDestroy ( );在服务器会话内,单个文件由Rfile对象表示,Rfile对象提过功能打开和操作文件的方式,为了打开一个文件,并且添加数据,可以使用如下函数:TInt WriteToFileL(RFs& aFs,const TdesC& aFileName,const TdesC8& aData)RFile file;TInt err = file.Open(aFs,aFileName,EFileWrite);if(err = KErrNotFound)err = file.Creat(aFs,aFileName,EFileWrit

31、e);User:LeaveIfError (err);CleanupStack:ClaeanupClosePushL(file);User:LeaveIfError (file.Seek(EseekEnd,0);User:LeaveIfError (file.Write(aData);CleanupStack: PopAndDestroy ( );这段代码尝试打开一个现有文件,如果不存在的话,则创建文件。该文件是按照二进制文件打开,具有非共享的写入权限。文件也可以按照文本文件打开,支持其他多种访问模式,包括共享写入和独占或共享读取。通常在打开文件时定义访问模式,不过可以在文件打开时使用Chan

32、geMode()更改它。如果正在使用共享写入权限,可以使用Lock()声明对某个文件区域的临时独占权限。以后再使用UnLock( )解除锁定。4.2 活动对象简要介绍上文提到了File browser模块提供了异步服务,接下来将简要介绍一下Symbian OS的活动对象:活动对象是Symbian OS实现异步访问的一种手段,它可以高效地实现操作系统的多线程。使用活动对象可获得的好处是:与使用线程相比较,它编程简洁,且CPU的效率更高。本节将详细介绍活动对象的基本概念及响应流程。Symbian OS实现了抢先式多线程,因此它能同时运行多个应用和多个服务器。一些活动对象用于在某个单一线程中实现非抢

33、先式多任务。线程间的调度由Symbian OS自动完成。程序员只是创建一个线程,并将其设置为能运行所需的任务。系统调度器向每个线程自动分配CPU时间。线程间的切换如此频繁,以至一个线程的执行看上去是连续的。某个线程可以有一个活动调度器,它调度各活动对象间的执行时间(为该线程分配的时间)。可以把活动对象视为线程的子任务。然而,活动调度器在调度过程中使用了一个非抢先方法:正在执行中的活动对象不会被中断(如同线程执行一样)。当活动对象完成其任务并把控制权交还给活动调度器时,它自己会做出决定。然后,活动调度器就可以在执行过程中选择另一个活动对象。在很多情况下,线程中都安装有一个活动调度器。在这种情况下

34、,程序员可以立即使用活动对象。例如,用户界面(UI)应用(.app)有主线程,主线程有一个活动调度器。然而,当写服务器(.exe)或创建自己的线程时,必须在这些活动对象能被使用之前先安装这个活动调度器。活动对象的典型用法是:在某个应用中处理一些事件。例如,应用框架使用一些活动对象来处理按键和屏幕更新。处理该事件的活动对象往往会发起一个对已被该程序员所重置的方法(例如CCoeAppUi:HandleKeyEventL( ))的回调。当这类方法被重置后,需要理解的是:该方法是由某个活动对象所调用的,这意味着,在该方法返回之前没有其他活动对象可以运行。通常, 活动对象用于发出一个异步调用,并当服务供

35、应商处理完请求后去处理这些结果。流程如下:1、创建活动对象并将其添加到活动调度器中2、要求活动对象创建一个异步请求。该活动对象将其iStatus作为针对该异步方法的一个参数传递。这个异步方法将iStatus 变量设定为KRequestPending,以表示该活动对象正在等待某个请求的完成,并将请求消息发送给服务供应商。然后,异步方式返回。在活动对象的方法返回之前,它调用SetActive( )方法,后者向活动调度器指出:必须追踪这个活动对象的完成。3、当服务供应商完成请求之后,它将结果代码赋予iStatus变量。4、活动调度器追踪被激活的活动对象。如果活动对象的iStatus不是KReques

36、tPending,就调用其RunL( )方法,因为服务器端的请求已经就绪。5、Method RunL( ) processes the result code of the previous asynchronous request.方法RunL( )处理先前的异步请求的结果代码。上面讲述的范例十分简单:活动对象被用于仅完成一个异步请求。然而,RunL( )本可以发出一个新的异步请求,激活自己,并等待,直到活动调度器再一次调用其RunL( )。第5章 数据通信模块实现第5章 数据通信模块实现本软件的连接模块主要分为蓝牙模块和Wi-Fi模块,用以实现利用这两种不同通信方式而进行的通信。软件研究通

37、过套接字实现手机间文件的传送。套接字代表一个通信“信道”的逻辑端点,利用TCP/IP等协议,提供可寻址端点之间的通信。它是物理及其的网络地址和逻辑端口号的组合,另一个套接字可以给它传输数据。因为套接字由及其地址和端口号确定,所以在一个特定的计算机网络中,每个套接字是唯一表示的。这就允许应用程序唯一的识别网络中与其通信的另一个位置。套接字分为断开式和连接式套接字。断开式套接字把数据包(数据包)简单地从一个参与者传递到另 一个参与者,而没有在两个参与者之间进行会话的概念。这导致: 每次向断开式套接字写入数据时,都必须指定目的参与者的地址。类似地,从断开式套接字读取数据时,每次读取都必须指定发送者的

38、地址。断开式套接字不保证数据包将按照发送时相同的次序到达目的地。连接式套接字保证了在两个参与者之间建立会话的概念,因此只需在首次连接时一次性指定地址,并且数据报会按次序到达。类似于给一个朋友打电话。这种套接字的特点是:建立和使用效率较低。软件采用Symbian OS提供的客户端/服务器框架,采用连接式套接字实现控制端和受控端的通信。凡是提供服务的一方我们称为受控端,而接受服务的另一方我们称作控制端。软件采用Symbian OS提供的客户端/服务器框架,采用连接式套接字实现控制端和受控端的通信。凡是提供服务的一方我们称为受控端,而接受服务的另一方我们称作控制端。5.1 控制端部分模块的实现控制端

39、模块分为四个部分:连接、发送命令、接收数据、断开连接。图5-1为控制端流程图。连接模块实现:(1)连接Symbian OS的Socket服务器图5-1 控制端流程图无论控制端还是受控端,所有的Series60套接字编程的第一步都是连接到Symbian OS套接字服务器。这比串行通信所需的初始化简单。TInt err = iSocketServer.Connect();If(err != KerrNone & != KErrAlreadyExists)User:Leave(err);所有希望使用套接字API的应用程序都必须连接到Symbian OS套接字服务器,这和连接到服务器套接字不是一个概念

40、。包含客户端套接字的应用程序必须连接到Symbian OS套接字以创建套接字,该客户端将连接到一个服务器套接字,(通常位于另一台设备中)。(2)作为健全性检查,应该确保套接字服务器至少支持一种协议:TUint numProtocols;Err = iSocketServer.NumProtocols(numProtocols);User:LeaveIfError(err);(3)打开套接字连接到Symbian OS套接字后,即可打开一个套接字,通过调用Rsocket:Open()函数执行。TInt err;err = iSocket.Open(iSocketServer, KAfInet ,

41、KSockStream ,KProtocolInetTcp);if(err != KErrNone & err != KErrAlreadyExists)User:Leave(err);以上代码只是初始化一个套接字对象,并未连接它。其中KAfInet表示因特网套接字,KSockStream表示可靠(面向连接)套接字,KprotocolInetTcp表示TCP传输控制协议。(4)启动套接字连接iSocket.Connect(iAddress,iStatus);发送命令模块的实现创建并连接套接字后,就能发送数据包了。RSocket提供了Send( )方法,来通过套接字发送数据。以下代码将消息Cap

42、ture发送出去。TBuf8iSendBuffer;iStatus = KRequestPending;_LIT(KSendData, Capture);将数据写入发送缓冲器中:iSendBuffer.Copy(KSendData);iStatus = KRequestPending;将发送缓冲器中的数据发送出去:iSocket.Send(iSendBuffer,0,iStatus);User:WaitForRequest(iStatus);接收数据模块的实现调用RecvOneOrMore()函数实现控制端接收数据的功能。它至少读取一个比特数据,由参数TsockXfrLength返回接收数据的

43、大小。首先要创建一个文件:RFile iFile;TInt aReceivedDataLen = 0;如果有没有指定的文件,就创建文件,如果已经存在,则替换原来的文件:iFile.Replace(CEikonEnv:Static()-FsSession(), iImageNameBuf, EFileWrite);将iNextMediaDataBuf中的内容写入文件:iFile.Write(iNextMediaDataBuf);aReceivedDataLen = iNextMediaDataBuf.Length();将缓冲器iNextMediaDataBuf长度设置为零:iNextMediaD

44、ataBuf.FillZ(0);while(aReceivedDataLen aImageLength)iDataBuf.FillZ(0);从受控端接收信息并写入缓冲器iDataBuf中:iRecvDataSocket.RecvOneOrMore(iDataBuf, 0, iStatus, iLen);User:WaitForRequest(iStatus);if(iStatus.Int() = KErrNone)aReceivedDataLen += iDataBuf.Length();if(aReceivedDataLen = aImageLength)将缓冲器iDataBuf中的内容写入

45、文件中:iFile.Write(iDataBuf);elseTInt aLastReceivedDataLen = 0;iFile.Size(aLastReceivedDataLen);iFile.Write(iDataBuf.Left(aImageLength- aLastReceivedDataLen);iNextMediaDataBuf.Copy(iDataBuf.Right(aReceivedDataLen- aImageLength);break;iFile.Close();调用RecvOneOrMore()方法获得从服务器中发送出的数据,所有数据都从连接中得到时,它才完成。RecvOneOrMore()方法形式如下:Void RecvOneOrMore(TDes8& aDes, TUint flags, TRequestStatus& aStatus, TsosketXfrLength& aLen )断开连接模块包括析构函数和结束函数。断开连接或退出时,首先应该关闭套接字。在取消和关闭任意句柄前,应该确保该句柄已经初始化(使用Handle()和SubSessionHandle()。否则可能导致出错。CCommsProjectEngine:CCommsProjectEngine()/关闭所有子会话Can

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922