《Java即时通讯系统.docx》由会员分享,可在线阅读,更多相关《Java即时通讯系统.docx(30页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、即时通讯系统设计摘要:互联网中的即时通讯聊天系统的研究已经成为了当今网络通讯技术开展的一个 热点,局域网内的即时通讯聊天系统更是成为了当今社会通讯技术发前沿阵地。局域 网即时通讯软件的诞生不仅加强推动了企业工作效率的提高,为培训企业的教学带来 了新的思路和手段,还为人们之间的交流创立了一种新型的、廉价的、快讯的、简便 的工作方式,目前的即时通讯系统不仅仅是娱乐聊天的工具,更是影响着局域网内部 的管理及其交流方式。本系统采用客户机/服务器(C/S)模式,本系统开发环境是JAVA 8.0,遵循网 络通讯技术基本数据传输协议TCP/IP协议,本课题的最基本的功能是通过计算机之 间的文本数据的互换的形
2、式实现思想的交流和沟通,优点是方便快捷。关键字:数据传输,传输控制协议,服务器,客户端,C/S模式曲南科技一一等款有自当考信(信息管理与服务)毕业企攵本系统主要划分为客户端、服务器两局部。客户端主要完成对用户发送的信息进 行处理、登录、注册的处理,客户端功能如图2-1所示。客户端图2-1客尸端功能图服务器段主要是接受客户端响应的请求来就行处理,在客户端发送给服务器的 时候将请求封装成特定格式的对象发送给服务器,服务器根据请求来做出响应的处 理,服务器端的功能图如图2-2所示图2-2服务器端功能图曲南科技大学龙塔数有自当考信(传息管理与服务)毕业俗女第3章系统主要功能模块设计3.1 课题分析系统
3、需求分析由工程小组成员经过屡次的小组会议与讨论,最终制定一套统一的 系统设计框架(用例和类图)。经过讨论为促进小组成员对课题核心技术的理解和掌 握,在设计阶段要求课题小组成员都要对课题核心技术进行相对的设计,另外要完成 系统局部具体功能的实现。3.1.1 系统总体功能本系统为即时通信系统,主要以传递信息为主,经过分析制定信息传递格式为: 定义一个类,让类实现可序列化接口,类中定义其需要传输的信息为其成员变量,信 息以字可以序列化的对象进行传递。3.1.2 系统核心技术1 .客户端:客户端利用对套接字输入流、输出流进行传递保持连接的持续。设 计一个工具类,其类定义两个MAP成员变量,用于存储单独
4、聊天窗口和群聊聊天 窗口。在定义一个工具类存储好友列表窗体。2 .服务器端:采用多线程,定义信息处理接口,利用MAP存取在线用户与其 对应的输出流,采用数据库技术存储用户的各种信息。3.2 客户端设计图例客户端流程图客户端功能图简明扼要地展现了客户端的工作流程,如图3-1所示。曲南科技大学密塔数有自学考信(传息管理与服务)毕业卷女、YIY图3T客户端流程图3.3 客户端功能介绍及实现客户端是多个图形界面的组合,包括注册界面、登录界面、好友列表界面和聊天 窗体界面,各个图形界面完成各自的功能。其主要功能如下:(1)完成用户的注册;(2)客户的登陆;(3)客户信息之间的单聊、群发。曲南科技大学密塔
5、数有自学考信(传息管理与服务)毕业卷女客户端相关类的简介1 .客户端相关类的简介QqClientLogin类功能:qq客户端登录界面主要代码:protected void processRequest( ServletRequest request ServletResponse response)throws Servlet Except ion., lOException response.setContentType(text/html;charset=UTF-8);String action = request.getParameter(action);if (loginRoom .e
6、quals(action) /登录时,写入系统公告 thisloginRoomfrequestt response); else if (sendMessage .equals(action) /发送聊天信息 thissendMessages(requestresponse);else if (HgetMessages .equals(action) /从XML文件中读取聊天信息this.getMessages(requestresponse);)登录界面实现介绍:整个Frame由北部,中部,南部三个局部组成。北部有一个Label;中部有一 个Panel (panel2),而这个Panel是一
7、个3行3列的网格布局;南部有一个 Panel (panel 1),这个panel上有三个按钮。登录界面如图3-2所示。 A -F localhost:8080/ChatRoom/index.jsp用户名:李中杰进入习I曲南科技士皆密善教育自学考信(信息管理与服务)毕业裕次图3-2登录界面1 .客户端相关类的简介QqFriendList类功能:qq客户端好友列表框界面InfomBack类中更新在线的好友情况,关键代码如下:boolean b = (Boolean) informBack, get (0);if (b) /如果为真,用户上线通知User user = (User) infonnBa
8、ck. get(l);System. out. printin(user. getNickName();rf. add (user) ;/添加到界面中System, out. printin (user. getNickName () + 上线); else /否那么为下线通知rf.remove(from);System, out. println(from + 下线了 );)Infom类中更新离线线的好友情况 if(!b) Updatable updateable=(Updatable)MessageContextForServer. getNeed(Updatable);User user
9、= (User)informback. get(1);updateable, update (user);MessageContextForServer. removeOutLine(from);Iterator sendable 二MessageContextForServer. getOnLineValue();while (sendable. hasNext() try (sendable, next(). send(message); catch (lOException e) e. printStackTrace ();)10南南科技大学方善敖有自学考铁,(信息管理S服务)毕业卷次好
10、友列表框实现介绍:这个列表框是个选项卡布局。分为“我的好友”,“陌生人”两个选项卡。在 此,只实现我的好友选项卡,其余两个制作成两个按钮,不实现其功能。整个Panel (Panel 1是个BorderLayout布局)由北部,中部,南部三个局部组成。北部有一 个Button (我的好友);中部有一个ScrollPane (该控件中还有Panel (Panel2), 该Panel是一个N行一列的网格布局(假设有50个好友)。其中存放好友头像和 编号(好友头像由Label数组处理);南部还有一个Panel (Panel3)(该Panel是 一个2行1列的网格布局,其上放着两个按钮“陌生人”,群发信
11、息”)。总共用 到三个Panel,注意顺序。好友列表界面如图3-3所示。欢迎来到心之语聊天室!所有人李欣杰李小杰李中杰夜空杰当前在线人图3-3好友列表界面2 .客户端相关类的简介一一QqChat类 功能:这是与好友聊天的界面 主要代码:public void sendMessages( ServletRequest request ServletResponse response)throws Servlet Except ion., lOException response. setContentType(,text/html; char set=UTF-8);request.setChar
12、acterEncoding(UTF-8H);Random random = new Random();String from = request.getParameter(from); /发言人String face = request.getParameter(face); /表情String to = request.getParameter(to); /接收者String color = request.getParameter(HcolorH); /字体颜色11曲南科技上当布等效有自学考信(信息管理与服务)毕业裕次String content = request.getParamete
13、r(content); /发言 内容String sendTime = new Date() 一oLocaleStrirRgl); /发言时间 ServletContext application = getServletContext();String sourceMessage =application.getAttribute(message).toString();try /发言时间sourceMessage += + from + uH + face + ” + to + ”卜/font说: + “font color= H + color + “ + content + ( + s
14、endTime + H) n;applicationsetAttribute(messagesourceMessage);request.getRequestDispatcher(Messages?action=getMessages&nocache= + random.nextlnt(10000).forward(requestresponse); catch (Exception ex) Logger.getLogger(Messages.classgetName().log(LevelSEVERE null, ex);)聊天界面实现介绍:整个Frame只有四个控件组成。一个文本域(Tex
15、tArea ),两个面板(Panel), 两个文本框(TextField ),三个按钮(Button )。这个Frame是个默认的 BorderLayout布局,中部是个文本域;南部是个面板,而这个面板上面有一个文本 框和一个按钮;北部是个面板,而这个面板是个默认的BorderLayout布局,北部有 一个文本框,西部和东部各有一个按钮。聊天窗体如图3-4所示。12曲南科技大学密塔数有自学考信(传息管理与服务)毕业卷女,: :;W 聊天室应 :/localhost:8080/ChatRoom/main.jsp双迎来到心之语聊天室!所有人李欣杰李小杰李中杰夜空杰当前在线人夜空杰幸福的对李欣杰说:
16、你太厉害了 (2020-10-19 19:48:07) 李小杰温柔的对李欣杰说:你要部嘟部(2020-10-19 19:48:34) 李小杰温柔的对李欣杰说:你要理嘟部(2020-10-19 19:48:36) 李小杰温柔的对李欣杰说:你要哪嘟嘟(2020-10-19 19:48:37) 李小杰温柔的对李欣杰说:你要哪嘟部(2020-10-19 19 48 39) 李小杰温柔的对李欣杰说:你要哪嘟部(2020-10-19 19:48 41 ) 李小杰温柔的对李欣杰说:你要胖嘟部(2020-10-19 19:48:42) 李小杰温柔的对李欣杰说:你要些嘟部(2020-10-19 19:48:43
17、) 李小杰温柔的对李欣杰说:你要嘟嘟郸(2020-10-19 19:48:43) 李小杰温柔的对李欣杰说:你要噬嘟那(2020-10-19 19 4S 44) 李小杰温柔的对李欣杰说:你要理嘟郦(2020-10-19 19 48 44) 李小杰温柔的对李欣杰说:你要部嘟郎(2020-10-19 19:48:44) 李小杰温柔的对李欣杰说:你要部嘟部(2020-10-19 19:48:48)李欣杰对表情|微笑着 P说:字体颜色:|汲认颜11发送I堡All CopyRights ? reserved 2020火山省渣渣灰Sen、 Console , Proq-$图3-4聊天窗体3 .客户端相关类的
18、简介一一 QqAlIChat类功能:这是与好友群聊的界面showAlIMessage (Message m)显示群聊信息聊天界面实现介绍:整个Frame只有四个控件组成。一个文本域(TextArea ), 一个面板(Panel), 一个文本框(TextField ), 一个按钮(Button) o这个Frame是个默认的 BorderLayout布局,中部是个文本域;南部是个面板,而这个面板上面有一个文本 框和一个按钮。4 .客户端相关类的简ClientConServerThread类功能:这是客户端和服务器端保持通讯的线程。不断的读取从服务器端发来的 信息并进行判断是哪类型的信息,然后做相应
19、的处理。功能描述:本系统之间的通信遵守一定的协议当用户登录的时候将自己的帐号密 码与登录的标志发送给服务器,服务器接收到信息以后解析一下信息,验证帐号密码 是否正确,假设是正确那么客户端与服务器建立连接,同时服务器将上线好友的信息发送 给每一个在线的好友,刷新好友列表,同样的当好友下线的时候发送信息给服务器, 服务器进行解析将下线好友信息发送过给每一个在线好友进行好友列表的刷新,当单13曲南科技大学龙塔数有自当考信(传息管理与服务)毕业俗女发群发的时候都发送信息给服务器,服务器根据之前定力的协议进行处理,发送给相 应的用户。判断接收到的是否是好友上线的信息boolean b = (Boolea
20、n) loginback. get(0);if (b) /如果为真,登陆成功User user = (User) loginback. get(1);rf. add (user) ;/添加自己的信息ArrayListonlineUser=(ArrayList0)for(int i=0;ivector.size();i+)Sy stem. out. print In (,vector,+i+,: +vector. element At (i)+ user:M+username);if(username.equals(vector.elementAt(i)Printwriter out;try o
21、ut = response.getWriter();outprintln(Halert(,该用户 已经登录1);window.location.href=index.jsp;H);18曲南科技大学密塔数有自学考信(传息管理与服务)毕业卷女 catch (lOException e) eprintStackTrace();)flag=false;break;)/保存用户信息if(flag)/创立/添加用户/添加用户/将UserListener ul=new UserListener();User Listener 的对象ul setUser(username);user .addllser (u
22、l .getUser();到Userinfo类的对象中session. setAttribute( user, ul);User Listener 对象绑定到Session 中session, set Attribute ( username username);/保存当前登录的用户名sessionsetAttribute(HloginTimeH newDate() .toLocaleStrine();保存登录时间ServletContext application=getServletContext();String sourceMessage= if(null!=application.g
23、etAttribute(message)sourceMessage=application.getAttribute( message11) toString();)sourceMessage+= 系统公告:H + username +19南南科技大学方善敖有自学考铁,(信息管理S服务)毕业卷次走进了聊天室! ;application.setAttribute(message,sourceMessage);try (request.getRequestDispatcher(login_ok.jsp).forward(request response); catch (Exception ex)
24、 Logger.getLogger(Messages.class.getName().log(Level.SEVEREs null, ex);).服务器相关类的简介ManagedientThread类功能:用于绑定管理用户id和服务器与用户通信的线程,用HashMap将用户和与 客户端通讯线程进行绑定。关键代码如下:public static HashMap hm =new HashMap();向hm中添加一个客户端通讯线程public static void addClientThread(String uid ,SerConClientThread ct) hm. put (uid , c
25、t);1 .服务器相关类的简介SerConClientThread类功能:服务器和某个客户端的通信线程,对从客户端取得的消息进行判断,然后 做相应的处理。服务器端接收到信息后提取出来相应的信息判断假设id的值为空那么为群聊天那么将信息发送给每一个在线的好友,如果不为空的时候就发送给对 应的好友。2 .服务器相关类的简介MyServerFrame类20南南科技大学名兽教育自学考信(信息管理易服务)毕业企次功能:这是服务器端的控制界面,可以完成启动服务器,关闭服务器。服务器与客户端的数据传递原理服务器与客户机之间存在着大量的数据传递,主要通过3个过程:首先通过服务器端套接字ServerSocket
26、的构造方法构建服务器套接字,并绑定 特定端口。然后在客户机端程序中,利用客户端套接字Socket的构造方法 Socket (InetAdress addresss , int port)创立一个套接字流, 并将其连接到指定IP地址的指定端口号,其IP地址可以用InetAdress。getByname (服务器IP地址)表示,从而与服务器IP地址可以 表示为: InetAdress 。 getLocalHost () , port)在客户端建立数据输入流类ObjectlnputStream的实例read,用于从服务器中 读取数据,同时建立数据输出流类ObjectOutputStream的实例wr
27、ite用于上服务器发送数据,从而构造了客户机与服务器之间的数据通道。通过类ObjectlnputStream的read。方法读取来自数据流的数据,如: readObject()读取序列化对象。通过类ObjectOutputStream的writeObject ()方法上数据流写入数据,如:writeObject ()写入序列化对象。3.6总结这个系统的总体设计主要分为客户端、服务器两大局部,客户端登录注册的时候 遵循一定的协议将客户的信息发送给服务器,服务器进行解析假设是登录将好友的信息 发送给在线的每一个好友,假设是注册将注册的信息发送给服务器保存在服务器端,在 发送消息的时候遵守格式发送信
28、息给服务器,服务器判断出来是群发还是单发就发送 给相应的用户,群发的时候就发送给每一个在线的好友。21曲南科技大学龙塔数有自当考信(传息管理与服务)毕业俗女第4章系统测试系统在开发的过程中,对于开发的各个时期都可能引入错误。所以,我们需要对 开发的系统进行测试。所谓的软件测试就是,在一定的条件下操作程序,去发现程序 当中存在的错误,以此来衡量软件的质量,并且对系统是否可以到达设计的要求。进 而进行评估的过程错误!虽然能够在各个阶段结束以前可以通过正式的技术评审和管 理复审的方法去发现软件中的过失并去纠正,可是审核并不能够发现软件中所有的错 误。软件测试成了对软件规格说明、软件设计和编码的最后也
29、是最彻底的审核。通过 软件测试,能够发现软件中绝大局部隐藏的错误,然后可以有效的提高软件产品功能 的实现,产品的正确性、可靠性,进而可明显提高软件的质量错误!4.1 软件测试软件测试基本包括以下几个方面:单元测试、集成测试、系统测试、验收测试、 回归测试等。本次测试主要有以下几个测试的步骤:单元测试:对该程序的源代码进行测试,通过检查各个模块,查看每一个模块是 否实现了之前规定的功能。集成测试:简单的说就是将各个模块组装起来进行的测试工程,主要是对相关软 件体系的结构进行的测试。系统测试:就是将成形的该软件放到实际的运行环境里,与其他的系统组合然后 进行的测试。其中包含一些功能测试,性能测试等
30、。4.1.1 白盒测试白盒测试,就是把软件当成一个透明的盒子,是对所有的逻辑路径进行的测试, 然后查看是否实现设计的要求错误!大多的单元测试都使用白盒测试。白盒测试总体 上分为静态和动态两大类。动态方法中最重要的就是路径和分支的测试。4.1.2 黑盒测试黑盒测试,主要根据软件的需求分析书上所描述的功能,通过测试,观察是否实 现所提到的功能,以及是否实现了需求分析书未提到的功能。该测试方法主要是按用 户的角度出发的,进而来进行相应的测试。22南南科技大学名兽教育自学考信(信息管理易服务)毕业企次4.1.3 系统测试系统测试是软件开发中一个重要的内容,在测试阶段可以发现工程的缺乏和错误 之处,经过
31、改正使系统更加完善。所以,系统测试是工程工程中必不可少的局部。4.2 测试方法与总结测试方法因为本系统主要是采用Java语言来进行编写的,在编写的程序中,系统是由很 多具有不同功能的类组成的,在每个类编写完成后,需要编写一个main。方法,来 测试其是否实现此功能。在测试中还可以使用Eclipse的DeBug功能来设置程序的断点,跟踪程序这样 也可以找到错误的原因,它的好处就是可以按照整个程序运行的顺序找到问题的原 因。该测试主要以功能性测试为主,采用手动测试方法,在每个功能完成后可以通过 编写测试用例来检测系统是否保证功能实现的正确性,是否有未完成或者与实现与需 求不符合的功能。编写测试用例的方法主要有:等价类划分法、边界值设计、因果图、判定表方法、 正交排列法和场景设计法等错误!未找到引用源。下面是以用户登录模块来简单介绍一下测试。如图4-1、图4-2所示。开始输入用户名和密码登录成功结束23函南科技大学龙等敖育曲学考信(信息管理与服务)毕业裕次图4-1登录模块流程图图4-2登录模块流图根据流图确定环形复杂性度量V(G),可以用三种方法求出V(G)的值:1. V(G)=边数一结点数+ 2=6-6+2=2。
限制150内