ImageVerifierCode 换一换
格式:DOCX , 页数:37 ,大小:903.85KB ,
资源ID:4814578      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4814578.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android聊天室解析Word格式文档下载.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Android聊天室解析Word格式文档下载.docx

1、本文首先对设计一个聊天室的背景进行了分析,另外再对国内外比较流行的几款即时聊天软件进行了简单的介绍,确定了毕业设计的主要工作,开发一个在局域网内可以聊天的简易手机聊天室。为了实现聊天室的功能,首先介绍了该项目涉及到的一些技术背景,包括TCP/IP协议,Socket“套接字”的基本机制以及需要使用的一个Serializable接口,来实现序列化与反序列化。之后对实现该系统的可行性与该系统的总体架构进行了分析,在此基础上,对整个系统进行模块划分以及对每个模块功能的实现进行了具体的设计。关键词:Android,Socket套接字,C/S模式,MySQL,Serializable注:本设计(论文)题目

2、来源于自选题目。AbstractThis system is designed as a simple android mobile network chat room, which uses the socket to achieve network communication, users can achieve information share and communicating in time. This system mainly adopted C/S (Client/Server) mode. Mobile as client, can implement its functi

3、onality like registration, log in and chat with other clients. While computer as server, it will link MySQL mini database, keep users information in its memory, receive different orders from client thus realize the delivery of data.This text firstly introduced the background to design a chat room, t

4、hen make summary of current international and demotic instant messaging service, in this case confirmed my main task of my graduation project: to create a simple chat roon which can achieve communicating under local area network.To achieve chat rooms function, firstly introduced referring technical

5、background, including TCP/IP agreement, Sockets basic system and the Serializable connector which is necessary to Socket, in order to implement serialization and deserialization. After I made a analysis of this systems feasibility and overall structure. Based on this comes out the module division of

6、 the whole system and detailed design to achieve every modules function.Key words: Android,Socket,C/S mold,MySQL,Serializable1 绪论1.1 聊天室的设计背景 二十一世纪,科技的发展突飞猛进,从纸的时代飞跃进入互联网的时代。信息的数字化、网络化,以及信息的及时性,无疑影响着每一个人。智能手机与互联网的飞速发展,更是促进了聊天工具的发展,使及时聊天成为人们生活中不可或缺的一部分,也占据人们生活时间的很大部分。及时聊天通过网络进行实时的沟通,不管是从实时性还是有效性上来讲,都

7、远比信件和E-mail来得方便。 为了实现一个更好的网络互交平台,用户之间能够实时方便的传递信息。因此,我将使用Android设计一个简易的手机网络聊天室,此聊天室是基于Socket机制的,采用的是C/S(Client/Server,客户机/服务器)模式,能够让登陆聊天室的人进行及时的聊天,并能使用表情来表达自己的情绪。1.2 国内外常用的聊天软件谈论到聊天软件,不得不说下当前常用的几款聊天软件,国内最火的当属于腾讯的QQ,微信,国外的有ICQ,MSN等。QQ:为深圳市腾讯计算机系统有限公司开发的一款基于Internet的软件。支持在线聊天、视频电话、点对点断点续传文件、共享文件、网络硬盘、自

8、定义面板、QQ邮箱等多种功能,并可与移动通讯终端等多种通讯方式相连。QQ是当前国内用户量第一的聊天软件,在2004年就已经拥有2.26亿注册用户、500多万收费用户,而且每天都在迅速的增加中。微信:微信也是腾讯公司的产品之一,于2011年初推出。可以快速发送文字和照片,并且支持多人语音对讲。在后期的版本中,微信加入了飞机大战等多种游戏,一时火爆中国,另外微信拥有摇一摇,漂流瓶和附近的人,也备受人们喜爱。经过一年多的发展,用户就突破1亿,到了2012年9月,用户已经达到了2亿,等到2013年1月,用户量已经超过3亿,其增长速度越来越快。ICQ:英文”I SEEY YOU”,意思为“我找你”。是互

9、联网上最早的即时信息传递软件,在刚推出是,迅速取得了广阔的市场,同时也引领了一场潮流,同类软件迅速跟进,很快的几乎每个国家都推出了本土的IM软件。MSN:一款出自于微软的即使通讯工具,4大顶级个人即时通讯工具之一。MSN除了基本的文字对话外,还拥有视频会议,语音对话,发送文件和照片等功能,也广受用户的喜爱,因此,世界各个国家都广泛的使用MSN。1.3 论文的主要工作此次设计的简易手机聊天室,为的是给用户提供一个群聊的平台,在这个聊天室中,用户除了发文字之外,还可以发送表情来表达自己的情绪。在项目中,本人分析了国内外几款影响较大的聊天软件,分析设计并实现了一个聊天室最基础的功能,拥有新用户注册,

10、用户的登陆以及所有用户的群聊功能。通过以上的工作,让本人熟悉了简易手机聊天室的开发过程,加深了对Android开发的理解。1.4 论文的结构本论文共分为五章。第一章:绪论。介绍了本项目的背景以及本人所需要做的工作和论文的结构。第二章:聊天室的技术背景。简单介绍了该聊天室需要用到的一些技术。第三章:系统分析。分析了该系统的可行性以及该系统的总体构架。第四章:聊天室的设计与实现。详细分析完成一个聊天室所需要完成的工作,包括各个模块功能说明、详细设计与实现,并给出了模块的流程图。第五章:系统的测试。任何一个系统的开发,必定伴随着系统的测试。对系统进行测试,帮我找出来系统所存在的问题,得以完善。2 聊

11、天室的技术背景2.1 TCP/IP简介TCP/IP是Transmission Control Protocol/Internet Protocol的简写,即传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议。TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。2.2 Socket的基本机制所谓的Socket 通常也称作为“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求。Socket是TCP/IP协议的一个十分流行的编程

12、界面,一个Socket有一个IP地址和一个端口号确定,在Java环境中实现基于TCP/IP协议的网络编程都需要采用Socket机制。一个Socket通信无论功能多么齐全、程序多么复杂,其基本结构均应包括以下步骤:创建Socket对象,建立连接;打开连接到Socket的输入、输出流;对Socket进行读写操作;关闭Socket。在一个Socket通信中要使用两个关键方法:getInputStream和getOutputStream。前者得到一个输入流,客户端Socket对象上得到的输入流是从服务器端发回来的数据流;后者得到的是一个输出流,客户端Socket对象上返回的输出流是将要发送到服务器端的

13、数据流。Socket通常采用C/S结构,使用Socket进行C/S程序设计的一般链接过程如图2.1所示:图2.1 Socket编程链接一般过程2.3 Serializable简介Java的“对象序列号”能将一个实现了Serilizable接口的对象转换成一组byte,日后要用到这个对象的时候,能把这些byte数据恢复出来,并据此重构那个对象。这一过程亦可通过网络进行,这意味着序列化机制能自动补偿操作系统间的差异。换句话说,可以先在Windows机器上创建一个对象,对其序列化,然后通过网络发给一台Unix机器,然后在那里准确无误地重新“装配”。不必关心数据在不同机器上如何表示,也不必关心字节的顺

14、序或者其他任何细节。Serialization主要用来支持2种主要的特性:1.RMI(Remote method invocation)。RMI允许像在本机上一样操作远程机器上的对象。当发送消息给远程对象和调用远程方法时,就需要用到serialization机制来发送参数和接收返回值。2.保存信息。在某个时候把状态信息保存起来,以便以后某个时候能恢复这些状态信息。另外:保存的时候不仅能保存对象的副本,而且还会把对象里面所应用的对象也保存起来,以此类推。就像在编译某个类一样,会涉及到所用到的所有类。但是所引用的对象也必须是可序列化的,不然会抛NotSerializableException异常。

15、本系统的设计需要用到序列化接口来实现两个自定义类的序列化。第一个为User类包含五个变量,分别为account(账号)、password(密码)、nickname(昵称)、operation(操作标记:登陆、注册)、avatar(头像ID)。另外在User类中还定义了一个serialVersionUID。因为Java的序列化机制是在运行时通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传过来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现

16、序列化版本不一致的异常。另外一个需要实现Serializable接口的是WQMessage。它包含着七个变量,分别为type(包含各种标志,如SUCCESS、FAIL)、sender(发送者)、senderNick(发送者昵称)、senderAvatar(发送者头像)、content(信息内容)、receiver(接收者)、sendTime(发送时间)。2.4 BroadcastReceiver简介所设计的聊天室的聊天功能并没有一直与服务端进行连接,而是在启动一个线程与服务端保持连接,接收来自服务端的信息,再以广播的形式传递到ChatActivity中的。BroadcastReceiver用于

17、接收程序(包括用户开发的程序和系统内建的程序)所发出的Broadcast Intent。启动BroadcastReceiver只需要两步:1、创建需要启动的BroadcastReceiver的Intent。Intent intent = new Intent(org.yhn.yq.mes);2、调用Contextde sendBroadcast()方法来启动指定的BroadcastReceiver。String message=new Stringm.getSender()+, m.getSenderNick(), m.getSenderAvatar()+ m.getContent(), m.

18、getSendTime(), m.getType();intent.putExtra(message, message); context.sendBroadcast(intent); 线程已经发出广播,我们只需要重写BroadcastReceiver的onReceiver()就可以,因为BroadcastReceiver本质上属于一个监听器。一旦实现了BroadcastReceiver,接下来就应该指定该BroadcastReceiver能匹配的Intent,调用BroadcastReceiver的Context的registerReceiver(BroadcastReceiver rece

19、iver,IntentFilter filter)方法来指定。代码如下IntentFilter myIntentFilter = new IntentFilter(); myIntentFilter.addAction( br=new MyBroadcastReceiver(); registerReceiver(br, myIntentFilter);每次系统Broadcast事件发生后,系统就会创建对应的onReceiver()方法,onReceiver()方法执行完之后,BroadcastReceiver的实例就会被销毁。3 系统分析3.1 聊天室可行性的分析这次设计的聊天室采用的是当前

20、流行的Java语言,Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME)的总称。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用与个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同事拥有全球最大的开发者专业社群。编辑器利用的是Eclipse,这种编辑器具有很好的提示功能,支持插件,使用方便。服务器使用的数据库为Mysql,这种数据库易于安装,所占空间小,启动快,使用Navicat for MySQL软件对其进

21、行管理非常方便。因此,开发一个聊天室是完成不成问题的。3.2 系统的总体架构整个聊天系统分为两部分:客户端和服务端。客户端运行于Android模拟器或者Android手机上,而服务端位于电脑上。客户端创建的Socket与服务器端的ServerSocket进行交互来实现网络数据交互。Socket与ServerSocket的交互过程如下:(1)服务端将创建一个ServerSocket类,同时在运行该语句的计算机的指定端口创建一个监听服务,如:ServerSocket serversocket=new ServerSocket(5555);这里指定端口5555,为了随时监可能听来自客户端的请求,执行

22、如下语句:Socket s=serversocket.accept();该语句调用了ServerSocket对象的accept()方法,这个方法的执行将使服务端的程序处于等待状态,程序将一直阻塞到捕捉到一个来自客户端的请求。(2)客户端将创建一个Socket对象,使之能与服务端进行数据的交互: Socket socket=new socket(ServerComputerIP,5555);Socket类的构造函数有两个参数,第一个参数ServerComputerIP为服务器所在电脑的IP地址,第二个为服务端所监听的端口号。(3)建立了连接的客户端与服务器端的两个socket各开启一条线程,使两

23、个socket保持连接。数据交互采用getOutputStream()和getInputStream()。客户端发出数据后,有服务端接收,再转发给所有在线的客户端,最后由各个客户端接收。并且,getOutputStream()和getInputStream()的位置不能颠倒,不然程序无法实现。客户端的Socket与服务器端的ServerSocket的通信如图2.2: 图3.1 Socket与ServerSocket的通信图4 聊天室的设计与实现4.1 聊天室的总体概述该聊天系统包括两个部分:客户端与服务端。客户端应用了Android手机,面向广大的用户群体,主要实现了用户的登陆,注册以及聊天功

24、能等功能,在用户实现登陆的时候,会向所有客户端发送该用户已经上线的消息,便能实现即时聊天。服务端位于电脑上,主要完成了用户信息的存储、客户端命令的接收与响应以及信息转发等功能。此系统使用的是TCP/IP协议,其通讯模式如图4.1所示: 图4.1 客户端/服务端Socket通讯模式图4.2 客户端的设计与实现客户端主要分为3个模块:登陆模块、注册模块和聊天模块。模块的分布如图4.2所示: 图4.2 聊天室客户端模块4.2.1 登陆模块 1、activity的启动启动程序时,最先启动的activity是LoginActivity,即登陆模块,显示的是登陆界面。哪个activity最先启动,是由An

25、droidManifest.xml清单文件所决定的,它是每个Android项目所必须的,是整个Android应用的全局描述文件。执行以下语句,代表着LoginActivity是最先启动的: action android:android.intent.action.MAIN /categoryandroid:android.intent.category.LAUNCHER/intent-filter/activity2、登陆界面登陆模块主要负责处理用户的登陆操作,并在用户成功登陆后跳转至聊天界面。启动LoginActivity时,调用login_activity.xml资源文件来显示UI界面,登

26、陆的界面由两个TextView、两个EditText、两个Button和一个CheckBox组成,两个TextView显示的是账户跟密码,两个EditText用来输入账户密码,两个Button中,一个为注册按钮,一个登陆按钮,最后的CheckBox是用来选择是否显示密码的。用户启动程序后,到了登陆界面,输入用户名和密码,点击登陆按钮。先判断输入的账号密码是否为空,如果不为空,就将账号密码序列化封装到一个User类,使用以下代码: User user=new User(); user.setAccount(accout); user.setPassword(passwaord);user.set

27、Operation(login信息传递到服务端,进行反序列化,解析出来,判断为“login”标志,连接到数据库,判断账号密码是否正确,如果正确,返回一个“SUCCESS”标志,客户端接收到“SUCCESS”标志,显示登陆成功,并且跳转到聊天界面。如果账号密码不正确,将返回一个“FAIL”标志,客户端接收到此标志,显示登陆失败。陆界面设计如图4.3所示: 图4.3 登陆界面登陆流程如图4.4所示: 图4.4 登陆流程图3、密码的显示方式在现实生活中,我们将使用到各式各样的密码,不管在任何场合,任何时间使用任何种密码,其共同的目的都是不想让人家知道自己的密码,所以在输入密码的时候,最好显示出来的不

28、是明码,而是一些符号。但是在没旁人的时候,突然忘记自己输入的密码是否是正确的,但又不想把密码删除再重新输入。所以,在设计中,我加入了一个CheckBox,其功能是让用户选择你所输入的密码是显示明码还是符号。其中,显示明码的语句如下:etpassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance();让密码显示为符号的语句如下:etpassword.setTransformationMethod(PasswordTransformationMethod.getInstance();4、记住密码不管是在聊

29、天软件中还是别的软件中,将用户登陆时的账号和密码保存下来,等待下次打开的时候直接显示用户名和密码,也就是记住用户名和密码是非常普遍的,也是非常必须的。因为这关系到用户的体验。试想一下,你每次开启这软件的时候都需要重新输入账号跟密码,这是很烦人的。想让用户觉得该软件是好软件,就需要从细节着手。我们在Android的开发中,应用程序都必然涉及数据的输入、输出。而对于记住账号和密码,程序只需保存很少的数据量,而且这些数据的格式都很简单:都是普遍的字符串。因此,我使用了SharedPreferences来进行保存数据。SharedPreferences保存的数据主要是类似于配置信息格式的数据,它保存的

30、数据主要是简单类型的keyvalue对。这非常符合该聊天软件记住密码这个功能。当我们输入了账号与密码之后,点击了登陆按钮,先判断记住密码的CheckBox是否选中,如果选中了,则将账号输入框与密码输入框获取到的账号密码保存到saveUserNamePwd文件夹中,该文件夹只有两个参数,一个是username,另一个是password。关键代码如下:if(remeber.isChecked()String usernameContent = etaccount.getText().toString(); String passwordContent =etpassword.getText().toString();/获取SharedPreferences时,需要设置两参数/第一个是

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2