毕业设计论文
设计(论文)题目: 基于Android的手机即时消息
学生姓名: 许树林 学 号: 1405080215 所在学院: 电子与信息工程学院 专 业: 计算机科学与技术 (软件) 指导教师: 蔚承建
2012 年 6 月 13 日
摘 要
随着移动通信与Internet的飞速发展及相互融合,GPRS使无线 网络高速接入到Intemet成为现实,移动用户从而可以享受到Intemet 提供的服务。即时通讯是基于互联网协议的应用程序,它能够使应用 不同设备的用户进行通信,随着手机的不断普及以及性能的不断提 升,为即时通讯系统从传统的PC机到手机的移植提高了很好的条件。
而且在中国庞大的手机用户中,通过手机使用即时通讯软件的用户越来越多。当前的手机操作系统都过于封闭,各大即时通讯软件采用的通讯协议也不统一,而Android是基于Linux的开源的手机操作系统 平台,XMPP是基于XML的开源的即时通讯协议,因此基于Android平台和XMPP协议开发即时通讯系统具有很好的应用前景。本文首先给出了系统的研究背景,对当前手机操作系统、即时通 讯软件和即时通讯协议的发展现状做了简单的介绍。进而详细的分析了Android的特征、架构以及Android应用的构成和工作机制,并对Android与其他手机操作系统进行了比较,说明了Android在手机操作系统中的优势。
本文详细的提出了系统的架构,以及系统服务器端和客户端的解 决方案,采用开源的Openfire作为系统的即时通讯平台,实现移动客户端之间的即时通讯。对系统客户端的组成模块进行了介绍,对即时通讯协议XMPP以及系统的通讯机制进行了分析。对服务器的运行流程进行了分析并对系统客户端进行了详细的设计与实现,最后对系统进行了部署和测试。
关键词:Android,XMPP,Openfire,即时通讯
I
ABSTRACT
With the rapid development and integration of mobile communication and Internet,GPRS wireless networks making high-speed access to the Internet becomes reality and mobile users can enjoy services provided by Internet.Instant messaging is based on applications of Internet protocol,which can enable users to use different devices to communicate.And with the constant popularity of mobile phones as well as the continuous performance improvement,it is time for real-time communication systems to transplant from the traditional PC-Mobile.
Additonally ,in the market of China’s huge mobile phone users ,mobile users of instant software is increasing.Currently, mobile operating systems are too closed and the major instant messaging software communication protocols used are not unified.Android is based on the open-source Linux mobile operating system platform and XMPP is a XML-based open-source instant messaging protocol ,so Android and XMPP-based instant messaging systems have good application prospect.
In this paper ,first of all,a systematic study of the background on the current mobile is introduced.Then the states of mobile operating systems, instant messaging software
and
instant
messaging
protocol’s
development
are
simply
described.Furthermore, the characteristics, architecture, composition and working mechanism of Android are analyzed in detail.Finally, the advantages of android are instructed through comparison with other mobile operating system.
This paper puts forward a detailed system architecture and the solution of system server side and client side.Using open-source Openfire as a system of instant messaging platform realizes client-side instant messaging. The module composition of the system client-side is introduced, and XMPP instant messaging protocol and the communication mechanism of the system are analyzed. Running Processes of the
II
server are analyzed.In addition,the system client’s side is designed and realized in detail.Finally, the system is deployed and tested.
Key Words:Android , XMPP , Openfire ,Instant Messaging
III
目录
摘 要 ................................................................................................................................................. I ABSTRACT ...................................................................................................................................... II 第一章 绪论 ..................................................................................................................................... 1
1.1系统背景 ............................................................................................................................. 1 1.2相关技术的发展现状 ......................................................................................................... 2
1.2.1手机操作系统的发展现状 ...................................................................................... 2 1.2.2即时通讯软件的发展现状 ...................................................................................... 2 1.2.3即时通讯协议的发展现状 ...................................................................................... 3 1.3本文主要工作 ..................................................................................................................... 4 1.4论文组织结构 ..................................................................................................................... 4 第二章 开发语言与相关技术 ......................................................................................................... 5
2.1 Android架构分析 ............................................................................................................... 5
2.1.1 Android特征 ............................................................................................................ 5 2.1.2 Android架构 ............................................................................................................ 6 2.1.3 Android应用的构成和工作机制 ............................................................................ 8 2.1.4 Android 与其他手机操作系统的比较 ................................................................. 10 2.2系统即时通讯协议 ........................................................................................................... 10
2.2.1 XMPP协议 ............................................................................................................ 10 2.2.2 XMPP地址结构 .................................................................................................... 10 2.3.3XMPP协议消息格式 ............................................................................................. 11 2.3.4 XML流 .................................................................................................................. 11
第三章 系统分析 ........................................................................................................................... 12
3.1系统概述 ........................................................................................................................... 12 3.2系统架构 ........................................................................................................................... 12 3.3系统客户端解决方案 ....................................................................................................... 13
3.3.1客户端系统架构 .................................................................................................... 13 3.3.2客户端系统用例图 ................................................................................................ 14 3.4系统服务器端解决方案 ................................................................................................... 14 第四章 系统的设计与实现 ........................................................................................................... 16
4.1系统客户端的设计与实现 ............................................................................................... 16
4.1.1 系统类图 ............................................................................................................... 16 4.1.2用户界面 ................................................................................................................ 17 4.1.3数据存储 ................................................................................................................ 17 4.1.4XML解析模块 ....................................................................................................... 18 4.1.5即时通讯模块 ........................................................................................................ 19 4.2即时通讯流程描述 ........................................................................................................... 21
4.3.1用户的注册和登陆 ................................................................................................ 22 4.3.2好友和群组列表的读取 ........................................................................................ 23 4.3.1添加好友 ................................................................................................................ 23
第五章 系统的部署与测试 ........................................................................................................... 25
5.1系统部署 ........................................................................................................................... 25 5.2系统测试 ........................................................................................................................... 25 第六章 结语 ................................................................................................................................... 31
6.1总结 ................................................................................................................................... 31 6.2展望 ................................................................................................................................... 31 参考文献......................................................................................................................................... 33 致谢 ................................................................................................................................................ 34
南京工业大学本科生毕业设计(论文)
第一章 绪论
1.1系统背景
随着移动通信的发展以及互联网向移动终端的普及,网络和用户对移动终端的要求越来越高,而Symbian,Windows Phone,ios等手机平台过于封闭,不能很好的满足用户的需求,因此市场迫切需要一个开放性很强的平台。经过多年的发展,第三代数字通信(3G) 技术获得了广泛的接受,它为移动终端用户带来了更快的数据传输速率。随着3G网络的广泛使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服务将会有更大的发展空间。Google为此于2007年11月推出了一个专为移动设备设计的软件平台——Android。
Android是一套真正意义上的开放性的移动设备综合平台,它包括操作系统、中间件和一些关键的平台应用。Android是由Linux+Java构成的开源软件,允许所有厂商和个人在其基础上进行开发。Android平台的开放性等特点既能促进技术(包括平台自身)的创新,又有助于降低开发成本,还可以使运营商能非常方便地制定自己的特色化的产品。因此,它具有很大的市场发展潜力。
根据中国互联网络信息中心(CNNIC)发布的《第28次中国互联网络发展状况统计报告》显示,截至2011年6月,中国网民规模达到4.85亿,较2010年底增加2770万人;互联网普及率攀升至 36.2%,较 2010 年提高 1.9 个百分点。我国手机网民规模为3.18亿,较2010年底增加了1494万人。手机网民在总体网民中的比例达 65.5%,成为中国网民的重要组成部分。说明即时通讯在网络应用中占据了十分重要的地位。
1
第一章 绪论
1.2相关技术的发展现状
1.2.1手机操作系统的发展现状
Windows phone是微软专门为手机开发的手机操作系统,Windows Phone具有桌面定制、图标拖拽、滑动控制等一系列前卫的操作体验,它还包括一个增强的触摸屏界面,更方便手指操作;以及一个最新版本的IE Mobile浏览器—该浏览器在一项由微软赞助的第三方调查研究中,和参与调研的其它浏览器和手机相比,可以执行指定任务的比例超过高达48%。可以看出,windows phone是一款非常有发展潜力的操作系统,不过和android相比还是比较年轻了,发展还未成熟。
Symbian是一个实时性、多任务的纯32位操作系统,具有功耗低、内存占用少等特点,非常适合手机等移动设备使用,经过不断完善,可以支持GPRS、蓝牙、SyncML、以及3G技术。Symbian曾今代表了智能机的一个时代,不过现在已经在走下坡路了。
Linux系统是一个源代码开放的操作系统。由于其开源性,手机制造商可以根据实际情况开发自己的Linux手机操作系统,从而也能够吸引更多的软件制造商在其上开发更多的应用软件,丰富第三方的应用。但是Linux操作系统也还存在一些不足,集成开发环境和基于Linux的产品与PC的连接性比较差等。 1.2.2即时通讯软件的发展现状
据腾讯QQ官方消息,2011年,QQ在国内己拥有2亿多的注册用户,7000多万活跃用户,同时在线人数700万以上。目前,腾讯QQ已成为国内用户最多的个人即时通讯工具,占据着国内约65%以上的市场份额。并且整合移动通讯手段,可通过客户端发送信息给手机用户。
MSN是微软公司开发的即时通讯工具,用户众多,操作简单,运行稳定,且与WindowsXP实现了无缝结合,使得MSN的普及速度非常快,在国内即时通讯软件中稳占了第二的位置。MSN采用邮件地址作为用户名,实现了与邮箱之间的连接。当对方不在线时,你可以选择给对方的MSN邮箱或Hotmail发送邮件。这样MSN就不仅是一个简单的即时通讯软件,而演变为以MSN为中心
2
南京工业大学本科生毕业设计(论文)
的整合服务。
ICQ是1996年11月在全世界范围推出的第一款即时通讯软件,是现在功能最强大、全球用户最多、应用最广泛的即时通讯工具。但由于它的操作和设置比较复杂,再加上全英文的聊天界面,使许多中国用户对它望而生畏,在中国市场上所占份额逐渐萎缩。近期,就在其他同行纷纷通过增加功能来吸引用户时,ICQ反而推出了功能精简版的ICQLite,试图在中国市场东山再起。 1.2.3即时通讯协议的发展现状
目前主流的IM(Instant Messaging)协议主要有即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)和XMPP(Extensible Mesageing and Presence Protocl)协议。
IMPP主要定义必要的协议和数据格式,用来构建一个具有空间接收和发布能力的即时信息系统。到目前为止,这个组织已经出版了三个草案RFC,但主要的有两个:一个针对站点空间和即时通讯模型的(RFC2778)和一个针对即时通讯/空间协议需求条件的(RFC2779)。
SIMPLE是目前为止制定的比较完善的一个,符合RFC2778和RFC2779草案。SIMPLE被定义为建立一个IM进程的方法。SIMPLE使用SIP(IETF中为终端制定的协议)来建立一次进程,再利用SDP(进程描述协议)来实际传输IM数据。
PRIM与XMPP、SIMPLE类似,已经不再使用了。
XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)。符合RFC2778和RFC2779草案。XMPP是一种基于XML的协议,它继承了XML环境中灵活的扩展性。经过扩展以后的XMPP允许通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序,而且XMPP还包含了针对服务器的软件协议,实现了在不同服务器之间的通话。
Smack是一个用 java 写的XMPP客户端代码库,Smack API, 是一个Java 的XMPP Client Library,也是由Jive Software开发。 优点:编程简单。
3
第一章 绪论
1.3本文主要工作
Android是基于Linux+Java的手机操作系统平台,XMPP是基于XML的开源的即时通讯协议,本文从实际应用出来,提出了开发基于Android平台的手机即时通讯系统。本文的主要工作包括:
(1)实现新用户的注册
(2)实现用户登录,并且获取好友列表 (3)实现好友的添加 (4)实现消息的接收和发送
1.4论文组织结构
本文首先分析了系统的研究背景,介绍了当前手机操作系统、即时通讯软件的发展现状和即时通讯协议,以及本文的主要内容。
第二章,介绍了Android的特征、Android的架构以及Android应用的构成和工作机制,并对Android与其它手机操作系统进行了比较,说明了Android的优势,以及相关通信技术。
第三章,提出了在Android平台上开发基于XMPP协议的即时通讯系统,提出了系统的架构、系统服务器端和客户端的解决方案。
第四章,对系统进行了详细的设计与实现,对系统的即时通讯流程进行了描述,并列出了部分关键代码。
第五章,对系统进行了部署以及从系统注册登录、获取好友和群组列表、消息的发送和接收进行测试。
第六章,总结了本文的主要研究内容和研究成果,分析了存在的问题,并对今后的发展方向进行了展望。
4
南京工业大学本科生毕业设计(论文)
第二章 开发语言与相关技术
2.1 Android架构分析
Android是一个移动设备的软件平台,是由Linux+Java构成的开源软件,它提供包括SDK、Key Apps、Middleware、Linux Kernel四个部分在内的全套手机软件方案。它开放了基于Linux内核以上的开发工具,从而保证了内容的可移植性和多样性。Android平台为我们开发应用程序提供了一套很好的框架,我们可以在这个平台的基础上开发不同的应用程序,也可以开发新的组件供应用程序调用。
2.1.1 Android特征
应用框架:用于开发可重用可替代的组件。
Dalvik虚拟机:Android采用的Java虚拟机是自主开发的代号为Dalvik的虚拟机技术,在保证API方面兼容的同时Dalvik针对移动手机进行了大幅优化,占用资源更小,运行效率更高。
内嵌浏览器:基于开源的浏览器网页排版引擎WebKit。
优化的图形:强大的自定义二维图形库。基于OpenGL ES 1.0标准的图形功能,在移动3D开发中有着至关重要的地位。
SQLite数据库:SQLite提供结构化的数据存储。它是一款轻型免费的且开源的数据库,它的设计目标是嵌入式的,它占用的资源非常低、需要的内存空间少、处理速度比较快和支持事务处理功能等。
多媒体支持:支持各种通用的音视频和静态图像格式,如MP3、JPG、PNG等。Open Core是Android多媒体框架的核心,所有Open Core,程序员可以方便快速的开发出想要的多媒体应用程序。
GSM技术:(依赖硬件)Global System for Mobile Communications,全球移动通讯系统,俗称“全球通”,是第二代移动通信技术,其开发的目的是让全球各地可以共同使用一个移动电话网络标准,让用户使用一部手机就能行遍全球。
5
第二章 开发语言与相关技术
蓝牙,EDGE,3G,and WiFi:(依赖硬件)蓝牙和Wi-Fi都是一种短距离的无线连接技术,在短距离内可以实现话音和数据的无线传输。EDGE(Enhanced Data Rate for GSM Evolution),是增强型数据速率GSM演进技术。
Camera,GPS,compass,and accelerometer:(依赖硬件)GPS(Global Positioning System)即全球定位系统。它是一个由覆盖全球的24颗卫星组成的卫星系统。Compass是个开放源代码的JAVA搜索引擎框架。
强大的开发环境:包括一个设备模拟器,调试工具,内存和性能检测,以及EclipseIDE的开发插件。Eclipse是个集成开发环境。 2.1.2 Android架构
Android的架构是由Linux内核、C/C++函数库、Dalvik虚拟机、应用框架以及关键应用程序构成的。通过编译基于框架的应用程序可以降低开发负荷。应用软件原则上是在Dalvik VM上运行的。
图2-1Android架构 2.1.2.1关键应用程序
Android平台内包含一些关键应用程序,如邮件收发客户端程序、短信收发程序、日历和网页浏览器等,开发者可以在其平台上开发更多有特色的应用程序。
6
南京工业大学本科生毕业设计(论文)
开发语言是Java。 2.1.2.2 应用程序框架
Android应用程序的开发基于框架和组件。Android本身已在其框架中提高了许多的组件供应用程序调用,当然开发者也开放新的组件,并将组件放入应用程序框架中,以供自己和其它应用程序调用。 2.1.2.3 C/C++函数库
Android应用程序框架之下是一套C/C++函数库,它们服务于Android应用程序组件,其功能通过组件间接提供给开发者。这些函数库包括:标准C函数库、媒体功能库、浏览器引擎、2D和3D图形库、基于WEB应用的的安全协议SSL、用于点阵和矢量字体渲染的FreeType以及SQLite引擎等。 2.1.2.4 Java程序运行环境
Android的Java程序运行环境包含一组Java核心函数库及Dalvik 虚拟机,它们有效地优化了Java程序的运行过程。所有的Android 应用都运行在它自己的进程里,该进程是一个Dalvik虚拟机的实例,Dalvik被设计成能在一台设备上高效的运行多个虚拟机实例。Dalvik虚拟机的可执行文件被封装成Dalvik可执行格式(.dex)。这是被优化过的最小内存依赖的格式, java编译器(dx工具)将注册了的和运行时用到的类编译成.dex格式。Dalvik虚拟机依赖于底层Linux内核提供的功能,如线程机制,和内存管理机制等。 2.1.2.5 Linux内核
Android系统平台是基于优化了的Linux内核,是其系统平台的核心。它提供诸如内存管理、进程管理、设备驱动等服务,同时也是手机软硬件的连接层,提供了一个屏蔽层用于屏蔽硬件和上层软件。
7
第二章 开发语言与相关技术
2.1.3 Android应用的构成和工作机制
对于一个Android应用程序来说,是由Activity、Intent Receiver、Service、Content Provider四部分组成,但并不是每一个Android应用程序都必须由这四部分组成。在应用程序中使用时,需要在配置文件AndroidMainfest.xml中进行配置。这个配置文件是每个Android应用程序所必需的,用于定义应用程序的组件、组件的功能以及必要条件等。 2.1.3.1 Activity
Activity是构成应用程序中最重要的构造块,在Android应用程序中,几乎都是通过Activity来与用户进行交互,所以Activity主要负责的就是创建与用户进行交互的显示窗口,你可以在这些窗口里通过调用setContentView(View)方法来显示你自己的用户界面。 2.1.3.2活动声明周期
活动(Activity)在系统中以活动栈的形式进行管理。当一个新的活动启动后,它被放到了栈项,成为了运行活动,而新活动之前的活动在活动栈里总位于新活动之下,直到新的活动退出才重新回到前台。
Activity有三个关键的循环:
(1)活动的整个生命期:从首次调用onCreate(Bundle)开始,到最终调用onDestroy()结束。在onCreate()中进行所有初始化,在onDestroy()时进行清理工作,释放资源。
(2)活动的可见生命期:从调用onStart()开始,到onStop()被调用为止。在这段时间内,即使活动不与用户进行交互,用户也可以在屏幕上看到它。在这两个方法调用之间,可以维护活动显示给用户的资源。onStart()和onStop()方法可以多次调用,因为活动随时可以在可见和隐藏之间进行转换。
(3)活动的后台生命期:从调用onResume()开始,到onPause()被调用为止。在这段时间内活动处于其它所有活动之前,并与用户进行交互。一个活动可以不断在resumed状态和paused状态之间变换。
8
南京工业大学本科生毕业设计(论文)
2.1.3.3活动之间的切换
Android使用了Intent类来实现活动之间的切换工作。Intent负责对应用中一次操作的动作、动作涉及的数据和附加数据进行描述。根据Intent的描述,负责找到对应的组件,将Intent传递给调用的组件并完成组件的调用。因此,Intent起着一种媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
在应用中,我们可以以两种形式来使用Intent:直接Intent,指定了component属性的Intent,通过指定具体的组件类,通知应用启动对应的组件。间接Intent,没有指定component属性的Intent,则需要包含足够的信息,这样系统才能根据这些信息,在所有的可用组件中,确定满足此Intent的组件。 2.1.3.4 Intent Receiver
Intent Receiver是用于对外部事件的响应,当外部事件发生时,会使用NotificationManager
通知用户。当一个
Intent Receiver
被触发
时,系统会在需要的时候启动对应的应用程序。如在本系统中,当用户正在其它界面进行操作时,有好友发送消息过来,就会以通知的形式发送到当前界面的正上方来通知用户。各种应用还可以通过使用Context.broadcastIntent()将它们的Intent Receiver广播给其它的应用程序,实现应用之间的通讯。 2.1.3.5 Service
Service是不带UI提供连续信息的应用程序。它是运行于应用程序后台的服务,在用户进行其它活动的时候,这个服务将一直运行在后台直到用户停止该服务或服务运行结束。 2.1.3.6 Content Provider
Content Provider应用程序能够将它们的数据保存到文件、SQL数据库和其它的存储设备中。当应用程序需要使用存储设备中的数据时,可以使用Content Provider来完成。使用Content Provider能够灵活的替换底层使用的存储设备,使
9
第二章 开发语言与相关技术
开发者可以专著于应用逻辑的开发,不用考虑底层存储设备的细节,从而使应用系统具有良好的数据迁移性。
2.1.4 Android 与其他手机操作系统的比较
Android是基于开源的Linux以及标准的跨平台的编程语言Java,而且源代码开放,并且免费允许所有厂商和个人在其基础上进行开发,其开源和免费政策将赢得不好手机制造商的支持。而且在其平台上集成了不少优秀的开源工程,相信将会有越来越多的优秀工程加入到 Android中来。相比其它手机操作系统过于封闭的特性来说,Android在手机操作领域将会占有很大的优势,其功能也将会越来越强大。
2.2系统即时通讯协议
2.2.1 XMPP协议
XMPP协议是基于XML语言的协议,因此该协议具有可扩展性,该协议允许因特网上的用户向因特网上的其他任何用户发送消息,即时使用的是不同的操作系统或者不同的浏览器。 2.2.2 XMPP地址结构
一个实体在XMPP网络结构中被认为是一个接点,它有一个唯一的标识JID,即实体地址,用来标识一个用户,但是也可以表示其它内容,如一个聊天室。一个有效的JID应该包括一些元素,如域名(domain identifier)、节点(node identifier)和源(resource identifier)。
JID的格式采用的形式是node@domain/resource,其中node表示用户在服务器上注册的用户名,domain用来表示接点不同的设备或位置,这个是可选的。如果用户a在server1上注册了一个用户名为arry的用户,那么a的JID就是arry@serverl。在发送消息时,使用arry@serverl就可以了,可以不用指定resource。
10
南京工业大学本科生毕业设计(论文)
2.3.3XMPP协议消息格式
XMPP协议包括三个顶层XML元素:Message、Presence和IQ。
Message用来表示传输的消息,当用户发送一条消息时,就会在流的上下文中插入一个Message元素,中间有用户发送的相关信息。
Presence用来表示用户的状态,如在线、离线等,当用户改变自己的状态时,就会在数据流的上下文中插入一个Presence元素,用来表示用户现在的状态。
IQ用来表示一种请求/响应机制,从一个实体发送请求,另外一个实体接受请求并进行响应。 2.3.4 XML流
在XMPP协议中,有两个基本概念,一个是XML流,一个是XML节。 XML流的定义:一个XML流是一个容器,包含了两个实体之间通过网络交换
的XML元素。一个XML流是以一个XML打开标签
XML节的定义:一个XML节是一个实体通过XML流向另一个实体发送的结构化信息中的一个离散的语义单位。任何XML节都是从一个XML流的下一级的某个打开标签(如
11
第三章 系统分析
第三章 系统分析
本章我们介绍了系统的总体框架及相关解决方案。系统采用C/S体系结构,采用开源的XMPP作为即时通讯协议,通过GPRS采用TCP协议连接到服务器,通过架设开源的Openfire服务器作为即时通讯平台,实现客户端与客户端之间的即时通讯。
图3-1 系统架构图
3.1系统概述
本文工作中实现的是在Android平台上开发即时手机通讯系统,它能够使用户在手机上方便的、迅捷的收发及时消息。
3.2系统架构
本系统采用客户端(C)/服务端(S)架构的体系结构,具有服务器端和客户端。 客户端:基于Android平台进行开发。通过GPRS无线网络与Intemet网络建立连接,通过服务器实现与Android客户端或PC机客户端之间的即时通讯。客户端负责初始化通信过程,进行即时通讯时,由客户端负责向服务器发起创建连接请求。
服务器端:采用开源的Openfire作为服务器。允许多个客户端同时登录并且并发的连接到一个服务器上。服务器对每个客户端的连接进行认证,对认证通过
12
南京工业大学本科生毕业设计(论文)
的客户端创建会话,客户端与服务器端之间的通讯就在该会话的上下文中进行。
3.3系统客户端解决方案
系统的客户端定位于Android手机平台。采用XMPP作为即时通讯协议,XMPP是基于XML的协议,根据协议的规则,采用Android平台提供的XML解析包对XML进行解析。根据应用活动都运行于主线程的特点,采用多线程技术来解决系统通讯问题。系统的用户信息在客户端存储在Android平台自身所带的SQLite数据库库。。
把系统的客户端分为四大模块进行没计开发。
1.通讯模块:负责与服务器建立通讯。采用多线程技术,通过创建两个线程来进行处理。一个线程负责消息的发送,一个线程负责消息的接收。
2.解析模块:丰要用来解析XML数据流,根据解析元素的不同类型封装成不同的数据对象。
3.数据模块:这个模块中定义了整个客户端中大部分的数据类型和对象。 4.应用模块:这个模块主要是客户端和用户交流的接口。 3.3.1客户端系统架构
图3-2 系统架构图
13
第三章 系统分析
3.3.2客户端系统用例图
图3-3客户端用例图
3.4系统服务器端解决方案
本系统采用开源的Openfire来建立即时通讯服务器。Openfire采用Java语言进行开发,Java语言具有跨平台的特点,因此Openfire服务器可以架设于多种操作系统平台之上。
Openfire服务器的内核主要由连接管理组件、服务器连接管理组件、会话管理组件、注册登录管理组件、管理更新组件、文件传输管理组件、外部管理组件、数据存储组件和传输器组件等组件组成。
Openfire实现了插件机制,方便扩展,通过安装与异构网络通讯的插件,就能与其它的通讯软件实现通讯。在网络连接中,是采用Apache的Mina框架来实现网络连接的,Mina框架使用一种比较好的非阻塞式的和高性能的I/O底层,采取异步I/O事件和事件驱动机制,使服务器具有很高的效牢和性能,从而能够及时处理大量的客户端连接和I/O随机突发性,单台服务器可支持上万并发用户。
在Openfire服务器中,针对每个用户的请求,创建一个线程来进行响应,同时采用线程池来创建和管理线程,提高了服务器的执行效率。线程池的大小可以根据服务器在运行的过程中接收到的用户请求的数量进行自动调整。如果长时间没有用户请求,则可以销毁一定数量的线程,使线程池中保持一定的线程数。当有用户请求时而线程池中没有空闲线程,且此时线程池中线程数没有达到最大线
14
南京工业大学本科生毕业设计(论文)
程数,则创建新的线程,如果达到最到线程数而又没有空闲线程时,则用户请求进入队列等待,直到线程池中有空闲线程,当用户退出时,同时线程到线程池中。
图3-4 Openfire服务器控制台界面
15
第四章 系统的设计与实现
第四章 系统的设计与实现
本系统为客户端.服务器端的系统架构,服务器端由基于Jabber技术的开源服务器Openfire和MySQL数据库共同构成。Openfire服务器负责处理所有用户的请求、访问数据库和消息的传递。客户端是基于Android平台开发的,负责连接并登录服务器,通过服务器来实现客户端与客户端或PC机客户端之间的即时通讯。
4.1系统客户端的设计与实现
在系统客户端设计中,我们采用MVC (M是模型层,V是视图层,C是控制层)的设计模式来进行设计。将视图层与逻辑代码以及数据模型层进行分离,实现系统的松散耦合,便于系统的维护和代码的重用。同时Android也为采用MVC的设计模式来设计和开发应用程序提供了很好的基础。在Android中,视图层可以通过定义XML文件的方式来设计用户界面,在数据模型层提供了ContentProvider 这个类来屏蔽底层具体的存储设备细节,使开发人员可以专注业务逻辑的开发而无需关心所使用的数据库和数据访问细节,从而使应用系统具有良好的数据迁移性。 4.1.1 系统类图
图4-1 系统类图
16
南京工业大学本科生毕业设计(论文)
4.1.2用户界面
在Android中用户界面可以通过两种方法建立:定义XML文件或是通过编写代码。通过定义XML文件来设计用户界面效率是非常高的,而且便于代码理解和代码重用。本系统客户端的用户界面我们就是通过定义XML文件来实现的。在Android平台中,Android应用程序最基本的功能单位是活动,主要用来与用户打交道,但是它本身并不直接显示在屏幕,而是通过调用方法setContentView()加载视图资源进行显示。而运行于后台的应用程序则可以通过Service来进行 设计,Service是不带界面的,我们可以通过Binder机制,与相关的活动绑定在一起。
4.1.3数据存储
在客户端中,我们采用Android平台自身所带的SQLite数据库来存储用户信息以及即时通讯聊天信息,使用ContentProvider将SQLite资料库系统封装起来,让应用程序直接使用ContentProvider所提供的界面函数。使用ContentProvider能够屏蔽数据库的差异性。因为SQLite数据库只是众多资料库储存系统之一,还有更多其他的资料储存系统,各系统的界面并不尽相同。ContentProvider提供了共同而一致的界面,让应用程序能独立于特定的资料库系统。因而应用程序与资料库系统就能进行松散耦合,提升了数据库系统的可替换性,而不用考虑底层使用的是何具体数据库。将ContentProvider写到AndroidManifest.xml配置文件中,让Android启动时,就立即启动ContentProvider服务。
表4-1 USER_INFO表
字段 id NAME PASSWORD IMTYPE REMEMBERNAME REMEMBERPASS 类型 INTEGER TEXT TEXT TEXT TEXT TEXT
17
描述 PRI 用户名 密码 是否记住名字 是否记住密码 第四章 系统的设计与实现
表4-2 SERVER_INFO表
字段 ADDRESS PORT 类型 BLOB TEXT 表4-2 server表
描述 地址 端口 关键代码:
CREATE TABLE USER_INFO(ID INTEGER PRIMARY KEY AUTOINCREMENT, USERNAME TEXT NOT NULL,PASSWORD TEXT NOT NULL, IMTYPE TEXT NOT NULL,REMEMBERNAME TEXT NOT NULL, REMEMBERPASS TEXT NOT NULL); \\n
CREATE TABLE SERVER_INFO(ADDRESS BLOB NOT NULL, PORT INTEGER NOT NULL); \\n
INSERT INTO SERVER_INFO(ADDRESS, PORT) VALUES(\\\"192.168.1.104\\\
SQLiteDatabase db = new SQLiteDatabase();
String[] sql = mContext.getString(R.string.Database_onCreate)
.split(\"\\n\");
db.beginTransaction(); db. execSQL(sql);
4.1.4XML解析模块
由于XMPP协议是基于XML的,为了对传输的XML消息进行解析,我们采用Android平台上提供的org.xmlpull.vl解析包对XML消息进行解析。XMPP协议中的XML语句是一种树型结构,解析XMPP协议的过程就是对树的遍历,节点的名字就是属性的名字,节点的值就是属性的值。在解析过程中,我们只对主要的消息元素进行解析,主要解析XMPP协议的三个项层元素
18
南京工业大学本科生毕业设计(论文)
4.1.5即时通讯模块
系统客户端通过GPRS无线网络采用TCP协议连接到Openfire服务器,通过服务器作为即时通讯平台,实现客户端与客户端之间的但口时通讯。TCP是可靠的连接,在连接服务器的过程中,需要等待服务器的响应,程序才能继续运行,而这个等待的过程受网络质量的影响或长或短,都会造成程序的暂停。在Android应用程序中,与用户进行交互的应用活动都是运行在主线程中,如果把与服务器的连接过程也放在主线程中进行,就容易造成系统运行缓慢,甚至系统出现死机的假象,最直接的表现就是在系统界面上,你按任何键都没有反应。为了解决这个问题,在与服务器的通信过程中采取多线程的方式,创建两个线程,一个线程负责消息的发送,一个线程负责消息的接收。 4.1.5.1消息的发送和接收
通过系统,用户登录到服务器,向服务器发送获取好友列表和群组列表的请求,返回好友列表和群组列表,同时根据服务器转发过来presence语句判断好友和群组成员的状态。在用户登录到服务器、进入群组和用户状态发生变化时,也会向服务器发送presence语句,说明订阅情况以及报告当前所处的状态。
对于消息的传输,我们创建两个线程来负责消息的发送和接受。对于消息的缓存,创建两个消息队列,一个消息队列用来存储接收到的消息,接收消息线程负责随时接收从服务器转发过来的消息,当接收到消息时,将其存入消息队列中,同时通知用户有消息发送过来了,由用户线程从消息队列中取出消息进行处理。一个消息队列用来存储用户需要发送的消息,当队列中有消息的时候,就自动通知发送线程发送消息。在AndroidAPI中为我们提供了android.OS.Handler这个类用于消息的分发和处理。用户线程从消息队列中取出消息进行一些处理,然后实例化一个Handler类,通过obtainMessage方法进行封装,封装成特定的Message对象,通过重载handleMessage函数调用应用程序模块来处理。应用程序模块发送消息时,将要发送的消息封装成XML语句的形式,并将其放入消息队列中,当队列中有消息的时候,就自动通知发送线程发送消息。
当发送消息时,我们先创建一个与另外一个用户的会话通道,并通过调用smack包中的Chat.sendMessage()方法发送消息,下面列出接受消息和发送消息
19
第四章 系统的设计与实现
的关键代码:
private void addListener() { }
PacketListener myListener = new PacketListener() { };
// 将该监听器注册到连接中
conn.addPacketListener(myListener, filterMessage);
public void processPacket(Packet packet) { }
if (((org.jivesoftware.smack.packet.Message) packet).getBody() != null) { }
android.os.Message msg = android.os.Message.obtain(); msg.what = 1;
String s = packet.getFrom().trim(); msg.obj = s.substring(0, (s.length() - 6))
+ \"#\"
+ ((org.jivesoftware.smack.packet.Message) packet)
.getBody().trim();
PacketFilter filterMessage = new PacketTypeFilter(
org.jivesoftware.smack.packet.Message.class);
handler.sendMessage(msg);//交给支线程监听
//发送消息
ChatManager chatManager = conn.getChatManager(); newChat = chatManager.createChat(reName, null);
newChat.sendMessage(edit_text_value.toString());
20
南京工业大学本科生毕业设计(论文)
4.2即时通讯流程描述
系统注册登录离开时序图
图4-2客户端时序图
21
第四章 系统的设计与实现
流程图:
图4-3客户端系统流程图
4.3.1用户的注册和登陆
客户端成功连接到服务器后,向服务器发送创建一个新用户的请求,服务器将会先进行一个用户名验证,如果重复的话,将会返回一个错误信息。
客户端登陆时,先获得连接,当服务器验证失败时将会向客户端发送失败信息,登陆成功时将会向服务器发送一个用户的状态信息,用户从服务器读取自己的个人信息。
下面列出注册和登陆的关键代码
//注册
AccountManager accountManager = new AccountManager(connection); accountManager.createAccount(username, password); //登陆
22
南京工业大学本科生毕业设计(论文)
connection.login(account.getUsername(), account.getPassword()); Presence p = new Presence(Presence.Type.available); //向服务器发送在线消息 p.setFrom(connection.getUser()); p.setMode(Presence.Mode.available); connection.sendPacket(p); // 登陆成功时获取该用户的roster account.setRoster(connection.getRoster());
用户退出系统,服务器关闭与客户端的连接,回收线程到线程池中,同时会将你的离线信息广播给你的好友。 4.3.2好友和群组列表的读取
当用户登陆成功后并从服务器中获取到该用户的Roster后,将会返回该一个集合,该集合中包含了该用户所有的组列表,以及好友列表,下面列出关键代码
imControl = IMControl.getInstance();
conn = imControl.getConnection(); //获取roster Roster roster = imControl.getAccount().getRoster();
4.3.1添加好友
当用户向服务器中发送一个添加好友的请求时,首先先向服务器发送一个搜索好友的请求,是否存在该用户,验证失败的话则返回错误信息,搜索成功则在该用户的roster里创建添加的好友的entry,下面列出关键代码
//搜索好友
UserSearchManager searchManager = new UserSearchManager(connection); String searchService =\"search.\"+connection.getServiceName(); Form searchForm = searchManager.getSearchForm(searchService); Form answerForm = searchForm.createAnswerForm();//设置搜索条件 answerForm.setAnswer(searchBy, true);
23
第四章 系统的设计与实现
answerForm.setAnswer(\"search\
rd = searchManager.getSearchResults(answerForm, searchService);
//创建entry
Roster roster = account.getRoster();
roster.createEntry(name, name, new String[] { group }) 添加好友流程
图4-4添加好友流程图
24
南京工业大学本科生毕业设计(论文)
第五章 系统的部署与测试
系统采用C/S的体系结构。服务器采用开源的基于XMPP协议的Openfire,客户端基于Android平台进行开发。对于数据存储来说,服务器端采用MySQL数据库来存储用户信息和离线消息等。客户端采用Android平台自身所带的SQLite数据库来存储用户信息和聊天信息,文件则存储在存储设备sdcard中。Android客户端通过连接服务器可实现与Android客户端和PC机客户端之问的即时通讯。
5.1系统部署
Android客户端的测试我们是在安装在PC网络进行传输的。与PC机上进行即时通讯的软件我们采用的是开源的Spark即时通讯软件
5.2系统测试
启动服务器以及安装客户端软件的Android模拟器,并在模拟器上运行客户端软件和Spark客户端软件。从系统注册登录、获取好友和群组列表和消息的发送和接收进行测试。
测试用例表
编号 1 2 3 4 功能点 注册 输入/操作 预期结果 测试结果 成功 成功 成功 成功 备注 点击注册按钮 转至注册页面 登录显示好友 点击登录按钮 显示好友列表 搜索添加好友 点击添加按钮 添加显示成功 接收发送消息 点击发送按钮 接收成功 表5-1测试用例表
一,用户注册:
测试要求:在注册页面输入用户名为”ab”,并输入密码,确认密码,注册成功后能否在服务器用户列表中显示该用户。
25
第五章 系统的部署与测试
测试结果:
图5-1注册界面
图5-2服务器用户列表
26
南京工业大学本科生毕业设计(论文)
二,用户登陆显示好友: 测试要求:
在登陆界面按登陆按钮之后能否成功跳转显示页面,并且获取该用户的分组和好友列表,在服务器能成功发送用户状态,显示在线。
测试结果:
图5-3登陆界面
27
第五章 系统的部署与测试
图5-4登陆成功获取好友列表
图5-5登陆成功服务器端列表
三,添加好友: 测试要求:
服务器中的用户,测试能否成功添加该用户并显示在好友列表里 测试结果:
28
南京工业大学本科生毕业设计(论文)
图5-6添加好友界面
图5-7添加好友成功获取列表
29
第五章 系统的部署与测试
四,接收发送消息 测试要求:
打开对话界面,测试能否成功发送消息以及接收消息 测试结果:
图5-8 聊天界面
30
南京工业大学本科生毕业设计(论文)
第六章 结语
6.1总结
本文主要研究了Android平台的架构以及在Androi平台上开发即时通讯系统,主要实现了聊天通信的功能。
第一章目的和研究意义并介绍了本文的主要内容。
第二章,对系统开发平台Android进行了详细的分析,介绍了并与其它手机 操作系统进行了比较,说明了Android的优势,并介绍了相关通信协议。
第三章,提出了系统的架构、系统服务器端和客户端的解决方案。 第四章,对Android客户端从客户端界面,客户端数据库,XML解析模块,即时通讯模块几个方面进行了详细的设计与实现,最后对系统的即时通讯流程进行了描述。
第五章,对系统进行了部署和测试。
最后是结论部分,总结了本文的主要研究内容和研究成果,分析了存在的问题,并对今后的发展方向进行了展望。
6.2展望
本文在Android平台以及在该平台上开发手机即时通讯系统上做了大量的工 作,但因个人能力和时间有限,还有很多问题需要解决,现对未来可以进行的工作做出以下几点展望:
(1)本系统实现的即时通讯系统客户端是基于Android平台进行开发的,但是还未能真正解析Android的精髓,系统的界面设计也还不是很完善,对Android平台进一步研究,能够使系统在设计方面更加快捷和完善。
(2)本系统并未对传输数据进行加密操作,以后的工作可以对数据进行加密解密的操作。
31
第六章 结语
(3)本系统有时会出现线程死锁的问题,可能是设计上的缺陷,这将是将来研究开发的重要方向
相信随着研究的进一步深入,这些问题会逐步得到解决,相信基于Android平台的即时通讯系统会有着很好的应用前景。
32
南京工业大学本科生毕业设计(论文)
参考文献
[1]李芙蓉.当前智能手机操作系统及其比较分析[j] 信息技术,2008(5):18.19
[2]何伟,杨宗德,张兵等.基于 Symbian OS的手机开发与应用[M].北京:人民邮电出版社,2006:3-9
[3] 萨丹(Erica Sadun).The iPhone Developer's Cookbook:Building Applications with the iPhone 3.0 SDK (2nd Edition),2010
[4]王成,刘金刚.基于Linux的嵌入式操作系统的研究现状及发展 展望[J].微型机与应用,2004(5):4-6
[5]庞怡,许洪光,姜媛.即时通讯工具现状及发展趋势分析[J].科技情报开发与经济,2006(10):169-170
[6]赵炯.Linux内核完全注释[M].北京:机械工业出版社,2004:30-36 [7]Nadalutti,D.&L.Chittaro&F.Buttussi.Rendering of X3D content
on mobile devices with OpenGL ES[J].In 3D technologies for the world wide web 2006. [8]倪天龙,张贤高,王培.数据库SQLite在嵌入式系统中的应用[J].单片机与嵌入式系统应用,2005(10):35-37
[9]高焕堂.Google Android应用程序框架原理与程序设计36计 30-34
[10]Jerome(J.F.)DiMarzio.AndroidTMProgrammer's Guide[M], London:The McGraw—Hill Companies,2008:53-149
[11]公磊,周聪.基于Android的移动终端应用程序开发与研究[J]. 计算机与现代化,2008(8):85-89
[12]潘凤,王华军,苗放,李刚.基于XMPP协议和Openfire的即时通信系统的开发[J].计算机时代,2008(3):15—19
[13]郝记生,张曦煌.基于GPRS网络的无线数据传输方案[J].计算机工程与设计,2002(20):5224—5229
[14]张海燕.Java多线程技术在手机互联网中的应用[J].农业网络 信息,2008(3):97—98 [15]贾学锋.基于TCP协议的NAT穿透技术在P2P中的研究与实现[J].计算机应用与软件,2008(6):186—187
33
第六章 结语
致谢
该课题是本人在南京工业大学学习期间完成的。在这里,首先要感谢我的导师蔚承建教授,感谢他在学术上给予我的悉心指导和在生活上给予我的照顾,没有他的精心教诲和严格要求,我不可能完成项目的完成论文的撰写。在学习期间,您孜孜不倦的教诲,严谨的治学态度,其渊博的知识,给我留下了极为深刻的印象,同时也让我学会了许多做人的道理。在本论文的写作过程中,蔚教授在论文结构安排和内容上给我提出了许多宝贵意见。
然后还要感谢我的父母,感谢他们对我的养育之恩,他们是我最强有力的后盾,在我受到挫折的时候一如既往的支持着我,使我能够一步一步地走到今天,他们为我付出了太多太多,我无以回报!
34
因篇幅问题不能全部显示,请点此查看更多更全内容