简易聊天应用程序的设计实现分析

上传人:痛*** 文档编号:89240604 上传时间:2022-05-12 格式:DOC 页数:11 大小:84KB
收藏 版权申诉 举报 下载
简易聊天应用程序的设计实现分析_第1页
第1页 / 共11页
简易聊天应用程序的设计实现分析_第2页
第2页 / 共11页
简易聊天应用程序的设计实现分析_第3页
第3页 / 共11页
资源描述:

《简易聊天应用程序的设计实现分析》由会员分享,可在线阅读,更多相关《简易聊天应用程序的设计实现分析(11页珍藏版)》请在装配图网上搜索。

1、-Java网络程序设计大作业分组报名表工程名称简易聊天应用程序的设计与实现工程功能网络聊天室通常直称聊天室,是一种人们可以在线交谈的网络论坛,在同一聊天室的人们通过播送消息进展实时交谈。运用java程序编写聊天室,实现简单的聊天功能。它是图形界面,线程,流与文件系统等技术的综合应用。程序实现了聊天室的根本功能,其中有:1.启动效劳器。2.启动登陆界面。3.进入客户端界面。4.发送信息。5.离开客户端界面。6.关闭效劳器。团队成员性别年级院、系、专业*备注计算机科学与技术计算机科学与技术计算机科学与技术计算机科学与技术指导教师研究方向软件设计职称团队联系方式联系人联系地址 目 录一、团队介绍及人

2、员分工11.1 团队介绍11.2 人员分工1二、作品概述12.1 创作背景12.2 功能概要12.3相关技术22.4 作品可行性分析3三、需求分析33.1 功能性需求33.2 非功能性需求6四、作品实现64.1效劳端界面实现64.2客户端界面实现84.3登录实现94.4 聊天功能实现114.5 退出功能实现12五、作品设计、实现难点分析145.1 难点分析145.2 解决方案145.3 测试结果15. z.-一、团队介绍及人员分工1.1 团队介绍吴益帆:有良好的统筹能力和领导力,能合理安排各组员工作。咪:踏实耐心,有良好的创新能力和筹划能力。丹丹:勤奋刻苦、有钻研精神,对待编程工作热情细心,孜

3、孜不倦。吴晓晓:对待工作细致专注,设计能力较强。团队成员之间有较好的默契度及协作性。分工明确,各司其职,在共同的努力及相互的配合下,共同解决程序中出现的困难并尽可能的优化程序,最终完成整个工程。1.2 人员分工吴益帆:负责程序最后的整理,完成局部功能及错误的处理。咪:负责程序的编码局部及工程具体功能的实现。丹丹:负责程序的界面局部,为改程序搜索解决的方案。吴晓晓:负责程序的筹划局部,工程的可行性分析及文档的编写工作。二、作品概述2.1 创作背景网络聊天室通常直称聊天室,是一种人们可以在线交谈的网络论坛,在同一聊天室的人们通过播送消息进展实时交谈。在当今信息时代,越来越多的聊天工具被应用,jav

4、a语言是当今流行的网络编程语言,它具有面向对象,与平台无关,平安,多线程等特点。使用java语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的的,嵌入式设备进展应用程序的开发。面向对象的开发是当今世界最流行的开发方法,它不仅具有更贴近自然地语义,而且有利于软件的维护和继承,锻炼我们熟练地应用面向对象的思想和设计方法解决实际问题的能力。2.2 功能概要运用java程序编写聊天室,实现简单的聊天功能。它是图形界面,线程,流与文件系统等技术的综合应用。其界面主要采用了java.awt包,java.swing包等。程序实现了聊天室的根本功能,其中有:(1) 效劳器端功能描述:启动效劳器端:点击

5、开启按钮,启动效劳;端口效劳:输入效劳器的*个端口号,开启效劳器的这个端口;显示在线用户信息:在右边的用户列表显示所有在线的用户信息;显示用户聊天信息:在左边的聊天信息区域显示所有用户所发的信息;效劳端关闭:点击关闭按钮,关闭效劳。(2) 客户端功能描述:启动客户端:运行客户端程序,启动客户端;选择效劳器端口号:输入想要连接的效劳器的端口号;用户登录:填入用户名,点击登录按钮,连接相应效劳器;显示在线用户:在右边的用户列表中可以看到当前在线的用户;发送/承受聊天消息:在下面的文本输入区域输入要发送的容,点击发送可以在左边的聊天信息区域显示自己以及其他用户所发的信息;用户离线:点击离线按钮,与效

6、劳器断开连接;客户端关闭:关闭客户端图形用户界面,关闭客户端。2.3相关技术(1) Java概述JAVA语言有下面一些特点:简单、面向对象、分布式、解释执行、鲁棒、 平安、体系构造中立、可移植、高性能、多线程以及动态性。丰富的类库JAVA提供了大量的类以满足网络化、多线程、面向对象系统的需要。语言包提供的支持包括字符串处理、多线程处理、数学函数处理等,可以用它简单地实现JAVA程序的运行平台。实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。输入输出包用统一的流模型来实现所有格式的I/O,包括文件系统、网络、输入低级网络包用于实现Socket编程。抽象图形用户接口包实现了不同平台的

7、计算机的图形用户接口部件, 包括窗口、菜单、滚动条、对话框等,使得JAVA可以移植到不同平台的机器。网络包支持Internet的TCP/IP协议,提供了与Internet的接口。它支持URL连接,的即时访问,并且简化了用户/效劳器模型的程序设计。(2) 套接字Socket,简称套接字,用于实现网络上客户和效劳器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比拟低的层次上通信的。具体的说:一个效劳器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服武器端建立一个通信连接,在连接过程中,客户端被分配

8、一个本地端口与一个Socket建立连接,客户端通过写Socket来通知效劳器,以读Socket中的信息,类似的效劳器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。效劳器也通过它的本地端口连接一个Socket,通过读写和客户端通信。Socket程序的工作过程:1.建立Socket连接:在通信开场之前由通信双方确认身份,建立一条专用的虚拟连接道。2.数据通信:利用虚拟连接通道传送数据信息进展通信。3.关闭:通信完毕时,再将所建的虚拟连接撤除。2.4 作品可行性分析由于本软件知识一个聊天程序,程序只提供用户之间的聊天功能,故对网络传输数据要求不是很高,只要正常的传输速度就可

9、以了。三、需求分析3.1 功能性需求本聊天室分为聊天室效劳端和聊天室客户端,效劳端与客户端之间通过套接字Socket(TCP)连接。在java中使用套接字相当简单,Java API为处理套接口的通信提供了一个类.Socket.,使得编写网络应用程序相对容易效劳器采用多线程以满足多用户的请求,并通过创立一个ServerSocket对象来监听来自客户的连接请求,默认IP地址为:localhost默认端口为8888。(1) 聊天室效劳端模块,包括端口效劳、启动效劳、关闭效劳、显示在线用户、显示用户聊天信息,如图3.1所示;图3.1聊天室效劳端模块图端口效劳:输入要侦听的端口,默认为8888;启动效劳

10、:启动效劳器,并开场在设置的端口中侦听,客户端用户可以登录并开场聊天;关闭效劳:关闭效劳器,侦听完毕。客户端用户不能再聊天;显示在线用户:效劳器列表显示在线用户数和所有在线用户名称;显示用户聊天信息:在文本区中显示所有用户聊天信息和登录、退出信息。(2) 聊天室客户端模块,包括用户登录、用户离线、连接设置、发送和接收聊天信息、显示在线用户、退出,如图3.2所示:图3.2聊天室客户端模块图用户登录:只能在聊天室效劳端已开启的情况下,用户点击按钮才能登录,用户登录之后才能开场聊天,登录后不能再修改用户设置和连接设置;用户离线:用户点击离线按钮,退出聊天,与效劳器断开连接;连接设置:用户可以设置自己

11、连接的效劳器的IP地址和端口号,默认的连接地址为:localhost:8888;发送和接收聊天信息:用户可以给所有人发送信息,并能看到其他用户发送给所有人的消息;显示在线用户:效劳器列表显示在线用户数和所有在线用户名称;退出:关闭所有聊天并退出客户端。(3) 程序流程:首先启动效劳器,用户翻开客户端,输入效劳器端口号,再输入用户名就可以登录,登录以后会显示当前在线的用户信息,用户可以看到其他用户所发的信息,自己也可以发送信息。用户点击离线就会与效劳器断开连接,最后关闭效劳器,如图3.3所示:图3.3程序流程图3.2 非功能性需求(1) 平安需求本程序能防卫制止未登录用户进展通信,防止数据丧失,

12、需要输入用户名、端口号连接相应的效劳器才允许用户间的通信。(2) 性能需求本程序使用的对象是所有运行该程序的用户,用户在连接效劳器可以进展客户端之间的通信。(3) 易用性需求本程序的使用对象计算机水平一般,有一定的易用性上的要求,程序应当存在着一些友好性的提示,提高程序的友好度。(4) 可维护性需求本程序能够及时发现并纠正系统故障,对系统数据进展备份,有系统复原功能。(5) 强健性需求本程序在遭遇非法输入数据,能够排除该数据并继续运行;对于系统异常有完备的预警预防处理机制。四、作品实现4.1效劳端界面实现在效劳端启动后,要显示简易聊天室效劳器的图形用户界面,如图6.1所示:图6.1 效劳端图形

13、用户界面简易聊天室效劳器的图形用户界面实现的主要代码如下:private Label svrIP = new Label(效劳器IP:);private Te*tField showSvrIP = new Te*tField();private Label svrPort = new Label(效劳器端口:);private Te*tField getSvrPort = new Te*tField(8888);private Button enter = new Button(启动);private Te*tArea output = new Te*tArea();private Label

14、 user = new Label(当前在线用户(0);private List list = new List();privatevoid setup() Panel top = new Panel();top.setLayout(new FlowLayout();top.add(svrIP);svrIP.setBackground(bg);top.add(showSvrIP);showSvrIP.setBackground(bg);top.add(svrPort);svrPort.setBackground(bg);top.add(getSvrPort);getSvrPort.setBac

15、kground(bg);top.add(enter);enter.setBackground(bg);Panel east = new Panel();east.setLayout(new BorderLayout();east.add(North, user);user.setBackground(bg);east.add(Center, list);list.setBackground(bg);setLayout(new BorderLayout();add(North, top);top.setBackground(bg);add(East, east);east.setBackgrou

16、nd(bg);add(Center, output);output.setBackground(bg);setBackground(bg);点击启动按钮,开启默认的效劳器8888端口,如图6.2所示:图6.2 效劳端端口开启8888端口开启实现代码如下:try server = new ServerSocket(Integer.parseInt(getSvrPort.getTe*t();rightNow = Calendar.getInstance().getTime().toLocaleString();output.append(rightNow + n开启效劳器.nn);enter.se

17、tLabel(关闭);ht = newHashtable();ht_s = newHashtable();st = new ServerThread();serving = true; catch (IOE*ception ioe) output.append(Error: + ioe + nn);4.2客户端界面实现在客户端启动后,显示简易聊天室客户端的图形用户界面,如图6.3所示:图6.3 客户端图形用户界面简易聊天室客户端的图形用户界面实现的主要代码如下:private Button B_login = new Button(登陆);private Button B_logout = n

18、ew Button(离线);private Button B_send = new Button(发送);private Label userName = new Label(您的用户名:);private Te*tField getUserName = new Te*tField(); / 获取用户名private Label svrIP = new Label(当前效劳器IP:);private Te*tField getSvrIP = new Te*tField(); / 获取效劳器 IP 地址private Label svrPort = new Label(当前效劳器端口:);pri

19、vate Te*tField getSvrPort = new Te*tField(); / 获取效劳器端口private Te*tArea input = new Te*tArea(); / 输入文本框private Te*tArea output = new Te*tArea(); / 输出文本框private Label user = new Label(当前在线用户(0);private List list = new List();privatevoid setup() Panel top1 = new Panel();top1.setLayout(new BorderLayout(

20、);top1.add(West, userName);userName.setBackground(bg);top1.add(Center, getUserName);getUserName.setBackground(bg);Panel top2 = new Panel();top2.setLayout(new BorderLayout();top2.add(West, svrIP);svrIP.setBackground(bg);top2.add(Center, getSvrIP);getSvrIP.setBackground(bg);Panel top3 = new Panel();to

21、p3.setLayout(new BorderLayout();top3.add(West, svrPort);svrPort.setBackground(bg);top3.add(Center, getSvrPort);getSvrPort.setBackground(bg);Panel top4 = new Panel();top4.setLayout(new BorderLayout();top4.add(North, top1);top4.add(Center, top2);top4.add(East, top3);Panel east = new Panel();east.setLa

22、yout(new BorderLayout();east.add(North, user);user.setBackground(bg);east.add(Center, list);list.setBackground(bg);Panel center = new Panel();center.setLayout(new BorderLayout();center.add(Center, output);output.setBackground(bg);center.add(South, input);input.setBackground(bg);center.add(East, east

23、);east.setBackground(bg);Panel south = new Panel();south.setLayout(new FlowLayout();south.add(B_login);B_login.setBackground(bg);south.add(B_send);B_send.setBackground(bg);south.add(B_logout);B_logout.setBackground(bg);setLayout(new BorderLayout();add(North, top4);add(Center, center);add(South, sout

24、h);setBackground(bg);4.3登录实现在客户端输入用户名,点击登陆,客户端显示系统时间和您已成功登陆 如图6.4所示,并将用户名发送给效劳端。效劳端接收来自客户端的数据,显示sdd登陆以及将用户名显示在用户列表中如图6.5所示,并将用户数据发送给所有在线的客户端。图6.4 用户登录用户登录代码实现如下:if (login)return;boolean accepted = false, refused = false;String line = new String();try connection = new Socket(getSvrIP.getTe*t(),Intege

25、r.parseInt(getSvrPort.getTe*t();in = new DataInputStream(connection.getInputStream();out = new DataOutputStream(connection.getOutputStream();out.writeUTF(L + getUserName.getTe*t();while (!accepted & !refused) line = in.readUTF();if (line.charAt(0) = R) refused = true;if (line.charAt(0) = A) accepted

26、 = true;if (refused) rightNow = Calendar.getInstance().getTime().toLocaleString();output.append(rightNow + n登录失败请使用合法用户名.nn);if (accepted) rightNow = Calendar.getInstance().getTime().toLocaleString();output.append(rightNow + n您已成功登陆.nn);login = true;图6.5 效劳端显示用户效劳端向在线用户发送当前在线用户列表代码实现如下:login = true;

27、list.add(userName);user.setTe*t(User ( + list.getItemCount() + );String str = list.getItems();line = A ; / acceptedfor (int i = 0; i str.length; i+) line += (stri + );out.writeUTF(line);line = L + userName;rightNow = Calendar.getInstance().getTime().toLocaleString();output.append(rightNow + n + user

28、Name + 登陆.nn);客户端获取当前在线用户列表代码实现如下:String str = line.split( );for (int i = 1; i str.length; i+) list.add(stri);user.setTe*t(当前在线用户( + list.getItemCount() + );4.4 聊天功能实现开启多个客户端,并登录。在输入框中输入信息,点击发送,数据传送至效劳端如图6.6所示,再由效劳端数据发送给其他客户端。每个客户端都接收效劳端发送过来的数据,并显示在消息框中,如图6.7所示。图6.6 效劳端显示消息用户发送消息代码实现如下:privatevoid s

29、endMsg() if (!login)return;try if (input.getTe*t().equals() output.append(n发送容不能为空请重新输入nn);return;out.writeUTF(M + input.getTe*t();input.setTe*t(); catch (IOE*ception ioe) output.append(Error: + ioe + nn);图6.7 客户端端显示消息4.5 退出功能实现 当用户点击离线,该用户的客户端显示您已成功离线,其他用户的客户端显示w*离线 如图6.8所示;效劳端显示w*离线如图6.9所示。图6.8 客户

30、端离线图6.9 效劳端显示用户离线离线实现代码如下:privatevoid Quit() if (!login)return;try out.writeUTF(Q);user.setTe*t(当前在线用户 (0); catch (IOE*ception ioe) output.append(Error: + ioe + nn); 如果用户直接关闭客户端窗口,效劳端则显示客户端zm意外关闭,如图6.10所示:图6.10 效劳端显示用户意外关闭客户端意外关闭实现代码如下:catch (SocketE*ception se) ht.remove(userName);ht_s.remove(conne

31、ction);list.remove(userName);output.append(客户端 + userName + 意外关闭n);五、作品设计、实现难点分析5.1 难点分析一个工程的开发过程并不总是一帆风顺的,其中难免会遇到困难,使编程无法继续下去。本程序的难点在于对通信机制的了解以及实现,同时窗口之间的通讯也需要认真分析。5.2 解决方案针对程序设计过程中遇到的困难,我们采取了积极有效的解决方法:团队讨论、上网搜索及向有经历的人员请教。查看了大量相关资料,最终经过反复的调试及测试,解决了上述的难点,实现了效劳器与客户端的通信。5.3 测试结果程序在Eclipse中运行测试,能实现预期的功能,工程完工!. z.

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!