《计算机网络》课程设计报告1《计算机网络》课程设计报告题目:简易聊天室姓名:学号:班级:《计算机网络》课程设计报告2一.问题描述和设计思想(1)问题描述在网络越来越便捷的今天,人们对网络的依赖也越来越多,越来越离不开网络,由此而产生的聊天工具也越来越多,其中应用比较广泛的有Netmeeting、MSN-Messager、腾讯QQ,等等。此类软件使得人们运用连上Internet网的电脑用户可以随时跟另外一个在线网民交谈,甚至可以通过视频看到对方的适时图像,互相讨论。使得人们不需要聚集在同一地点,不必担心昂贵的话费而畅快交流,工作、交流两不误。而且好的聊天室还有各种表情符号等可以加强我们的表达。而且费用低廉,信息交流速度快,在这个涌动的社会中加强联系,创造出更多的财富。在此基于Java网络编程的强大功能编写一个简易聊天室系统。一般来说,聊天工具大多数由客户端程序和服务器端程序组成,本系统采用客户机/服务器架构模式通过Java·提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天。因此使用Java的异步通信功能,实现网络通信的课程设计。功能要求:1.有一个聊天服务器,存储帐户信息;2.用户向服务器发送含有账户名的消息,服务器接受连接后,将账户名及其IP、端口记录下来,并刷新用户的账户列表;3.服务器监控聊天内容;4.支持多人聊天,聊天时列出当前所有在线的人员;5.客户端之间可以单独发送消息;6.支持图片表情;7.保存用户聊天信息;(2)设计思想Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。Java的语言功能很精炼,并增加了一些很有用的功能,如自动收集碎片。而且,Java很小,不需要占用多大内存。因此运用JAVA程序编写聊天室,实现简单聊天功能。本次课程设计做的是Java简单聊天室,它是图形界面、线程、流与文件等技术的综合应用。在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。服务器端工作流程:服务器端通过系统调用创建一个ServerSocket与指定的本地端口绑定,就可以在端口进行侦听。如果有客户端连接请求,则创建一个Socket,将客户端地址赋给这个Socket。然后登录成功的客户就可以在服务器上聊天了。客户端工作流程:客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。Socket程序的工作过程:1.建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接道。2.数据通信:利用虚拟连接通道传送数据信息进行通信。3.关闭:通信结束时,再将所建的虚拟连接拆除。《计算机网络》课程设计报告3二.功能实现和系统结构系统功能如下:服务器:端口设置:设置倾听的端口号,默认为8888。启动服务:开启倾听端口,允许客户端连接。系统消息:服务器启动后可以在聊天室内发送消息。停止服务:关闭倾听端口,中断所有客户端的连接。退出:关闭服务器。在特定端口上进行侦听,等待客户端连接。用户可以配置服务器端的侦听端口,默认端口为8888。向已经连接到服务器端的用户发送系统消息。统计在线人数。当停止服务时,断开所有的用户连接。系统运行稳定、安全可靠。一台主机只能启动一个服务器。客户端:用户设置:设置聊天时显示的名称,默认为匆匆过客。连接设置:设置要连接的服务器所在主机的IP地址和倾听端口。登录:连接服务器。发送消息:进行聊天,可单独发送消息给聊天室中的一个人。注销:与服务器断开连接。退出:关闭客户端。连接到已经开启聊天服务的服务器端。用户可以配置要连接的服务器端的IP地址和端口号。用户可以配置连接后显示的用户名。用户可以更改聊天时的表情。当服务器端开启后,用户可以随时登录和注销。用户可以向所有人或某一个人发送消息。系统运行稳定、安全可靠。可以默认连接到自己主机启动的服务器。《计算机网络》课程设计报告4三、采用的主要技术、遇到的难点和解决方法四、核心代码描述和相关技术说明系统结构如图所示:1.主要技术(1)操作系统:Windowsxp(2)开发工具:eclipse3.2及其VE插件(3)开发工具:Eclipse(4)使用GUI界面设计(5)JavaSwing技术2.遇到的难点和解决难点:表情信息的传送解决:通过对发送消息进行解析,提取出表情图片的信息进行顺序输出。4.1界面设计本程序采用的是Javaswing图形界面开发工具包来设计的,建立一个主类Client.java,然后在其构造方法加载程序所需的组件,设置布局方式(采用的是Boxlayout布局管理器)。构造方法如下:privatevoidinit(){否是服务器serversocket监听建立与客户端连接的套接字1.读客户端信息2.向客户端转发信息关闭服务器客户端socket1.读服务端信息2.向服务器写信息关闭客户端启动AppServer.java启动ChatClient.java登录注册是否注册《计算机网络》课程设计报告5box=Box.createVerticalBox();//竖结构Boxbox_1=Box.createHorizontalBox();//横结构Boxbox_2=Box.createHorizontalBox();//横结构Boxbox_3=Box.createHorizontalBox();//横结构box.add(box_1);box.add(Box.createVerticalStrut(8));//两行的间距box.add(box_2);box.add(Box.createVerticalStrut(8));//两行的间距box.add(box_2);box.add(Box.createVerticalStrut(8));//两行的间距box.add(box_3);box.setBorder(BorderFactory.createEmptyBorder(8,8,8,8));//8个的边距//开始将所需组件加入容器box_1.add(newJLabel(字体:));//加入标签box_1.add(fontName);//加入组件box_1.add(Box.createHorizontalStrut(8));//间距box_1.add(newJLabel(样式:));box_1.add(fontStyle);box_1.add(Box.createHorizontalStrut(8));box_1.add(newJLabel(字号:));box_1.add(fontSize);box_1.add(Box.createHorizontalStrut(8));box_1.add(newJLabel(颜色:));box_1.add(fontColor);box_1.add(Box.createHorizontalStrut(8));box_1.add(newJLabel(背景:));《计算机网络》课程设计报告6}4.2重点功能模块(1)启动和建立连接/***启动服务端*/publicvoidstartService(){try{serverSocket=newServerSocket(port,10);messageShow.setCaretPosition(messageShow.getText().length());//获取消息框字符串长度messageShow.replaceSelection(服务端已经启动,在+port+端口侦听...\n);//在末尾添加消息startServer.setEnabled(false);startItem.setEnabled(false);portSet.setEnabled(false);portItem.setEnabled(false);stopServer.setEnabled(true);stopItem.setEnabled(true);MessagePane.setEnabled(true);}catch(Exceptione){System.out.println(e);}userLinkList=newUserLinkList();listenThread=newServerListen(serverSocket,combobox,messageShow,showStatus,userLinkList);listenThread.start();//服务端的侦听类启动}4.3客户端聊天模块1.功能设计(1)界面分为3部分:中间部分显示所有聊天信息,最上边部分设置用户名、IP地址和《计算机网络》课程设计报告7端口号,底部用于文字和表情的输入与发送。2.界面设计图3聊天窗口(1)从服务器获取聊天信息的线程,接受服务器发送信息的方法。while(!socket.isClosed()){try{Stringtype=(String)input.readObject();if(type.equalsIgnoreCase(系统信息)){Stringsysmsg=(String)input.readObject();String[]str=sysmsg.split(%);textarea.setCaretPosition(textarea.getDocument().getLength());textarea.replaceSelection(系统信息:);for(inti=0;istr.length;i++){Filefile=newFile(src/image/%+str[i]+%.gif);《计算机网络》课程设计报告8if(file.exists()){textarea.setCaretPosition(textarea.getDocument().getLength());textarea.insertIcon(newImageIcon(getClass().getResource(/image/%+str[i]+%.gif)));}else{textarea.setCaretPosition(textarea.getDocument().getLength());textarea.replaceSelection(str[i]);}}}}catch(Exceptione){System.out.println(e);}}4.调试与测试测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施。聊天室的设计是较为重要的部分,在先前简单的界面设计时较为简单,当通过在该类中添加实现对发送按钮监听时由于没有定义该类的方法连接使得发送按钮不能实现。对这个小问题的检查较为简单。4.4服务器端模块1.功能设计(1)界面分为3部分:中间显示所有聊天信息;上边设置端口和IP地址,启动和停止服务器,还可以查看帮助;底部用于发送系统信息和查看聊天记录和在线人数。2.界面设计《计算机网络》课程设计报告9图4服务器窗口3模块算法(1)群发聊天信息publicvoidsendToAll(Stringmsg,Stringname){intcount=userLinkList.getCount();inti=0;while(icount){Nodenode=userLinkList.findUser(i);if(node==null){i++;continue;}try{node.output.writeObject(聊天信息);node.output.flush();node.output.writeObject(name+群发:+msg);node.output.flush();}catch(