基于TCPIP局域网聊天室设计实现分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于TCP/IP的局域网聊天室的
设计与实现
摘要
随着计算机网络技术的发展,各种各样基于网络的应用也随之诞生,比如基于互联网的信息发布,通信,数据共享等等。
局域网的发展也同样迅速。
很多政府机构,企业,学校,都是先以一个统一的局域网联结在一起,再分别接入INTERNET.因此基于局域网的即时通信工具,就这样应运而生了。
所以本文提出了一个更加合理的设计,并在WINDOWS平台上加以了实现.在本实现将客户端和服务端综合在一个程序之,用多线程实现不同的并行任务。
并进行了人性化的界面设计,使用起来更加简单方便,并且功能十分合理,又易于扩展以及个性化定制。
本文通过局域网聊天系统来具体共享存实现进程间的数据交换,利用windows消息机制实现进程间的同步,两种机制结合使用。
局域网聊天室作为一种新型的聊天工具可以提供更为及时、可靠、突破了必须有外界网络接入等优点,具有极其广泛的发展前景。
本文介绍了采用JAVA编程开发局域网聊天系统的一套比较常用的解决方案。
采用TCP模式进行文字聊天, 在客户端之间点对点(C/C)的进行。
本系统采用典型的C/S(客户端/服务器)的框架模式,在该方案中采用Socket(套接字)原理实现网络通信,最终实现了通过服务器中转的文字聊天、文件传输功能,从而大大降低了程序的开发难度。
本系统主要包括登陆、聊天、好友列表和服务器管理几个部分。
本系统从需求分析、系统的设计、功能的实现都严格遵循了软件工程设计的思想。
【关键词】Socket;TCP/IP;C/S;局域网聊天室
Abstract
With the development of computer network technology, a variety of Web-based applications also will be the birth, such as Internet-based information release, communications, data sharing, and so on. LAN development is quickly. Many government agencies, businesses, schools, are first linked together in a unified LAN, respectively connected to the INTERNET, LAN-based instant messaging tool, and thus came into being. In this paper, a more rational design, in WINDOWS platform to achieve integrated in this realization of the client and server in different parallel tasks within a program, multi-threaded. And the design of user-friendly interface, easy to use and very reasonable, and easy expansion and customization. LAN chat system to a specific shared memory data exchange between process and use the windows message mechanism to achieve inter-process synchronization, the two mechanisms used in conjunctionLAN chat room as a new chat tool that
can provide the advantages of more timely, reliable, broke the need of outside network access, has a very wide range of development prospects.
This article describes a JAVA Programming LAN chat system, a more common solution. TCP mode, text chat, peer-to-peer (C / C) between the client. The system uses the framework of a typical C / S (Client / Server) mode, the program using the Socket (socket) the principle of network communication, and ultimately the transit through the server, text chat, file transfer capabilities, which greatly reduces the difficulty of program development.The system includes landing, chat, friend lists, and server management of several parts. The system needs analysis, system design, the realization of functions strictly follow the idea of software engineering.
【Key words】Socket;TCP/IP;C/S;Local Area Network Chat Room
目录
第1章引言 (1)
1.1课题背景 (1)
1.2国外研究现状 (2)
1.3主要容 (3)
第2章局域网聊天室系统分析 (4)
2.1系统需求分析 (4)
2.1.1功能需求 (4)
2.1.2系统基本流程图 (4)
2.1.3性能要求 (5)
2.1.4测试环境规定 (5)
2.2可行性研究 (5)
2.2.1成本可行性分析 (5)
2.2.2技术可行性分析 (6)
2.3系统开发环境的分析 (6)
2.4数据流图 (6)
2.4.1顶层数据流图 (6)
2.4.2一层数据流图 (6)
第3章系统设计 (7)
3.1设计目标 (7)
3.2构建开发环境 (7)
3.3系统模块流程图 (8)
3.4系统功能模块图 (9)
第4章基于Eclipse的聊天室的分析与设计 (10)
4.1 TCP套接字的运用 (10)
4.2 TCP三次握手协议 (11)
4.3程序结构 (11)
4.3.1多用户在线方案 (11)
4.3.2软件框架 (12)
4.4代码实现 (12)
4.4.1用户登陆模块 (12)
4.4.2用户列表模块 (14)
4.4.3文本聊天模块 (16)
4.4.4文件传输模块 (18)
第5章局域网聊天室系统测试 (21)
5.1系统测试结果与分析 (21)
5.1.1用户登陆以及用户列表 (21)
5.1.2文本聊天 (22)
5.1.3文件传输功能 (25)
5.2本章小结 (26)
结束语 (27)
参考文献 ...................................................................................................... .28 致 . (30)
第1章引言
1.1课题背景
近年来,随着全球信息化进程的不断发展,网络的发展也非常迅速。
出于以快速、简洁、方便的处理各种日常工作事务的目的,越来越多的企业在其部使用局域网来进行相应的工作。
在部局域网的帮助下,企业能够使信息流程简化,提高相互之间信息交换的速度,进而提高工作的效率。
与此同时,随着互联网的发展,企业规模的扩大,业务量的增加,企业部的信息越来越私密,企业只希望员工通过部局域网进行沟通与交流,避免企业部通过Internet泄露到外部,为了决上述矛盾,人们提出了开发局域网聊天软件的构想,通过局域网聊天软件,企业员工可以随时的进行即时消息传递,召开网络会议等,有利于提高工作效率,同时又保护了企业部信息的安全。
在部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。
其中局域网聊天系统是一个重要组成部分,它为人们的交流提供了一个平台出于高效、快速地处理各种事务的作用[1]。
我在本文中将讨论一种基于TCP/IP使用Socket的局域网通信工具的设计与实现方法。
基于Socket的局域网通信软件可以为企业原有的局域网提供一种安全、快速、良好的通信机制。
它的实现过程只需要使用局域网聊天软件而不需要对企业的局域网现有的硬件进行改动,具有不需要支付其它的硬件花费的优点,它的使用可以降低局域网部的通信负荷,进而提高局域网部的使用效率,可以很好地实现企业部局域网的各种通信需求[2]。
基于Socket的局域网聊天工具是此类局域网聊天软件的具体实例之一,它很好地诠释了基于TCP/IP的Socket通信的原理,并且在企业部教学、讨论、通讯等应用中都具有非常好的实用价值。
它具有实时性,性好,占用服务器的吞
吐能力低,宽带资源利用率低,方便编程实现等优点。
基于TCP/IP使用Socket 的局域网通信软件具有应用围广阔的优点,不但可以处理传统上的简单的聊天通信需求,而且也能够扩展以适应新型的网络应用,如数据传输,网络教育等,拥有非常广阔的应用前景[3]。
本系统采用多线程结构,线程是一个独立的执行流,是进程部的一个独立的执行单元,相当于一个子程序,它对应于JAVA中的Thread类对象。
单独一个执行程序运行时,缺省地包含了一个主线程,主线程以函数地址的形式出现,提供程序的启动点,当主线程终止时,进程也随之终止。
根据实际需要,应用程序可以分解成许多独立执行的线程,每个线程并行的运行在同一进程中[4]。
一个进程中的所有的线程都在此进程的虚拟地址空间中,进行使用该进程的系统资源和全局变量。
操作系统给每个线程进行分配不同的CPU时间片,CPU 只执行一个时间片的线程,多于一个时间片的线程在执行时相应的线程在CPU 进行轮流执行,由于每个时间片时间很短,但是对于用户来说就像各个线程在计算机中的处理是并行的。
操作系统是根据线程的优先级来安排CPU的时间,优先级高的线程要优先运行,优先级低的线程则等待高优先级的运行完之后再运行[5]。
Windows提供了两种线程:工作线程(又称为后台线程)和用户界面线程。
用户界面线程通常用来处理用户的输入并响应各种事件和消息,其实,应用程序的主执行线程Thread对象就是一个用户界面线程,当应用程序启动时自动创建和启动,同样它的终止也意味着该程序的结束,进程终止。
工作线程用来执行程序的后台处理任务[6]。
1.2国外研究现状
基于局域网的即时通信工具,实际上是互联网即时通信工具的一个小规模版本,广域网上的即时通信工具,如今一般采用UDP或者TCP协议体系来实现,开发技术已经比较成熟,比如较早的MSN,ICQ Messanger,Yahoo 通这些国外开发的产品,还有国产的有名的QQ,新浪UC,LAVA-LAVA等,这些工具统统都实现了广域网上的即时通信,尽管都是即时通信,实现了即时聊天,以及文件传输的主要功能,但是也各有各的特色,比如ICQ的巨大客户群,MSN的个性化表情,YAHOO通的易操作性等。
而QQ也具有一个相当方便的屏幕截图功能,另外就是,所有上述软件都实现了网络即时的视频,语音聊天功能。
这些软件,在使用方面各有特色,在实现方面也各有所长,但基于这些产品正在商业运营阶段,其实现方式属于商业,具体细节不可能得知,但是它在大的方面无非就是各种利用各种平台上的网络通信接口,建构基于下层TCP/IP,或者UDP/IP协议的软件产品。
在局域网,这些功能的实现跟广域网相比更加简单,因为局域网的网络结构本身比广域网要复杂,但是又可以借这些理解网络协议,以及网络通信工具的实现原理,所以仍然极具研究价值[7]。
1.3主要容
本文主要容是设计一个基于WINDOWS平台的局域网即时聊天工具,然后阐述本软件的功能、特点及使用方法,并详细阐述开发本软件所用的相关技术,具体分析本软件的各个模块的功能及实现方法,说明本软件的设计思想及方法。
第2章局域网聊天室系统分析
2.1 系统需求分析
2.1.1 功能需求
根据与广域网聊天工具如QQ、MSN等的对比,及对公司、学校等团体需求的了解,本局域网聊天室需要完成如下功能:
1. 用户端之间的进行信息传递,这是需要实现的最基本的功能。
2. 客户端之间能够进行文件传输,通过服务器,实现文件传输功能。
使文件及时的在客户端之间传输。
3. 在线用户主机名列表的显示和维护。
及时实现在线用户主机的检查更新和维护。
4. 在C/S模式中,客户端和服务器是相互分不开的。
如果客户端启用后,首先查看服务端是否在线,如果在线则客户端进行顺利登录,如果不在线,提示登陆失败,点击确认退出登陆的客户端。
在聊天的过程中,服务端会一直进行监听确认是否有客户端退出系统;如果监听不到某一个客户端的CS,则认为服务器已经下线,就需要提示用户并建议其退出,一段时间后如果客户端没有响应,则自动退出[8]。
2.1.2 系统基本流程图
图2-1 聊天系统工作流程图
2.1.3 性能要求
首先要求程序要完全可靠,可以应付种种由于系统问题产生的错误,比如初始网络失败,对方突然下线等。
要求提前设想到类似的尽可能多的可能发生的事件,做出相应的应对措施,并向用户提交简单易懂清晰明白的提示信息。
程序要有良好的容错性,当用户进行非法操作时或者系统本身出现问题时要能以最好的方式退出程序,避免发生程序假死现象。
开发文档要有好的便于理解性,如果系统又要交由别人接手开发,或者自己由于种种原因需要进行二次开发,那么要保证以后能够清晰的理解整个系统的设计思路以及实现细节。
要求程序对所运行之系统的硬件条件要求尽可能低,运行时存占用尽可能小,响应速度要尽可能快。
并且不发生存泄漏之类影响系统运行的错误事件。
并且要求易于维护及扩展。
所以应该采用模块化开发,各个模块之间不要有太多的联系,以免维护困难。
2.1.4 测试环境规定
在开发完成以后,自己进行一个全面的测试。
检测系统中存在的漏洞,进行修复。
2.2可行性研究
2.2.1成本可行性分析
本系统是局域网聊天工具,适用于公司、学校、社团等团体局域网使用,故对硬件、网络等设备要求较低,从而经济成本很低,在未来真正作为企业使用时也没有很高的成本要求。
现阶段,因为本软件只做开发学习使用,在校期间花费时间,在此期间通
过自己学习和查阅图书以及询问老师获得相关知识和方法,并没有其他的支出,而且现阶段只做学习暂且不考虑经济成本及盈利问题。
2.2.2技术可行性分析
首先我已经搭建好开发所需要的软硬件平台,并进行了合理而完善的需求分析,做好了充分的前期准备工作,其次因为本程序的平台将基于WINDOWS,将要使用网络通信技术,而WINDOWS有完善成熟的网络通信接口,以及与JAVA开发环境的严密契合能力,加之相类似的更大规模的INTERNET通信工具产品也已有例在先,所以这个程序的开发可行性在技术上是完全可行的。
2.3系统开发环境的分析
系统采用JAVA作为开发语言、Eclipse作为开发工具,系统的设计从需求分析开始,就保证了系统的稳定性和可扩展性。
JAVA语言是一种面向对象的编程语言,具有很好的移植性、并且更加的安全和并发性,这使得JAVA语言各线程能够并发进行。
并且JAVA支持可视化图形界面,使得操作更加直观。
2.4数据流图
2.4.1顶层数据流图
图2-2聊天系统顶层数据流图
2.4.2一层据流图
图2-3 聊天系统一层数据流图
第3章系统设计
3.1设计目标
同一个局域网中,如何根据自身业务的要求,量身定制,选择一套有效的局域网聊天室系统。
如何来满足局域网部用户的通讯要求,在考虑到网络传输实时性,这现代社会通讯所必需的。
设计本系统时,分析网络承载、整个系统结构的组建等是实现局域网文字聊天所必需的。
局域网聊天作为一种广泛的网络应用对其基础的承载网络环境的要求较低。
局域网聊天的功能和应用效果体现在客户端,而服务器端则是必不可少的,对于系统的需求分析在系统设计的过程中应该明确、细致:
1. 用户登录:设立一个服务器,实现多个用户及时通信。
用户在登陆时候输入明确的用户名称,以便各用户之间能够识别。
2. 文本聊天:聊天室的功能即所谓的群聊,聊天的容所有的人都能够看到,
聊天室的功能即所谓的私聊,只有聊天双方才能看到。
用户还可以对字体进行修改。
3. 文件传输:多线程,收发可随时进行,相互之间没有相互影响,文件传输速度快。
3.2构建开发环境
硬件平台
CPU:P41.8GHZ;
存:256MB以上
软件平台
操作系统:windows XP或window 7
开发工具包:Eclipse
开发环境:JVM
分辨率:最佳效果1024*768像素
3.3系统模块流程图
局域网聊天室文字聊天业务流程图如图3-1所示。
图3-1系统文字聊天业务流程图
发送文件的流程为:用户添加文件向接收端发送文件传输请求,如果同意接收后,则启动计时器,发送文件流,反馈状态,否则继续添加文件,重复操作。
接收文件的流程为:服务器端执行接收线程,接收发送端传来的文件,并把它保存。
局域网聊天室文件发送业务流程图如图3-2所示。
图3-2系统文文件传输业务流程图
3.4 系统功能模块图
局域网聊天室功能模块图如图3-2所示:
客户端
用户登陆
主体框
对话框主体
登陆验证
N Y
服务器 记录用户登陆和显示当前在线用户
发消息
发送消息 主窗体
发消息
对话框窗体
服务器端
客户端
3-3局域网聊天室功能模块
第4章基于Eclipse的聊天室的分析与设计
4.1 TCP套接字的运用
在文字聊天时,服务器端与客户端的连接是采用的TCP套接节进行连接。
TCP套接字的使用如图4-1。
创建Socket对象SocketServer来处理服务器端与客户端的连接,Socket是Windows Socket API的高层抽象。
Socket通常和其他类类混合使用,这两个类负责数据的发送和接收[17]。
要使用Socket对象,首先要调用构造函数,然后调用Create函数创建一个Socket[9]。
Socket和TCP 的工作流程如下图所示:
图4-1 TCP套接字的使用
4.2 TCP三次握手协议
第一次握手:源主机通过发送一个数据帧来请求本次的连接。
第二次握手:当目的主机收到源主机发送的这个请求帧之后,发送一个带有源端机连接序列号和本次连接序号的确认帧表示同意连接。
第三次握手:源端机等待接收两次初始应答的序列号之后,就向目的主机发送一个带有两次连接序列号的确认[10]。
具体过程如下:
图4-2 网络传输的三次握手
4.3程序结构
4.3.1多用户在线方案:
采用客户端/服务器(C/S)的和JAVA中多线程结构模式。
服务器通过监听来判断是否有客户端请求登陆并予以响应,而客户端则是在需要登陆时候提交登陆请求以便服务器进行监听。
服务器通常情况下是始终运行的,用来监听各个网络端口,一旦收到客户端的请求,就需要立即启动一个进程来响应客户端的服务。
于此同时,服务器还将继续监听服务的各个端口,以便后来的客户端也能及时的接收到响应。
在这个过程中,很多线程被创建,线程的轮转是有时间片限定的,而这个时间片非常的小,对于客户端来说基本感觉不到,就像所有的线程都是在同时进行的[10]。
多线程的工作原理如下图所示:
图4-3 多线程在线
4.3.2软件框架
Users
SendOne SendAll FileTrans UserList Connect
Client Server
TCP Socket
图4-4 软件主题框架
4.4代码实现
4.4.1用户登陆模块
图4-5用户登陆模块
客户端登陆模块部分主要代码如下:
class Connect extends JFrame implements ActionListener, ItemListener,
{
public void link() throws Exception
{ // 连接服务器
hostName = hostText.getText().trim();
port = Integer.parseInt(portText.getText());
client = new Socket(hostName, port);// 创建一个流套接字并将其连接到指定IP 地址的指定端口号。
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream());
out.println(nameText.getText() + "&" + sex);
out.flush();}
}
服务器端登陆模块部分主要代码如下:
public static void addConnection(Socket s, ClientProc cp)
{if (connections == null)
{connections = new Vector<Socket>();}
connections.addElement(s);
if (clients == null)
{clients = new Vector<ClientProc>();}
clients.addElement(cp);}
public static void deleteConnection(Socket s, ClientProc cp)
throws IOException
{if (connections != null)
{connections.removeElement(s);
s.close();}
if (clients != null)
{clients.removeElement(cp);}}
public static Vector getClients()
{return clients;}
4.4.2用户列表模块
图4-6 在线好友主界面
客户端用户列表部分代码如下:
public void valueChanged(ListSelectionEvent e)
{// 监听下拉列表的显示容
if (e.getSource() == peopleList)
{try
{String select = (String) peopleList.getSelectedValue();
if (select != null)
{ // 确保选择非空
String[] userInfo = select.split("〖");
String name = userInfo[0].trim(); // 提取名字
if (!name.equals(chf.myName))
{ // 不能添加自己
int count = chf.perponsComboBox.getItemCount();
for (int i = 0; i < count; i++)
{chf.perponsComboBox.setSelectedIndex(i);// 选择第i项
String strName = (String) chf.perponsComboBox
.getSelectedItem();
if (name.equals(strName))
{ // 如果已经在列表中,就复合框中选中,所以要确保没有重名
return;
}}
// 如果没有添加,就会执行下面语句添加
chf.perponsComboBox.addItem(name);}}
} catch (Exception ee)
{System.out.println("发生错误在valueChanged " + ee);}}}
服务器端用户列表模块部分代码:
public String getName()
{return name;}
public String getSex()
{return sex;}
public Socket getSocket()
{return s;}
private void updateList()
{// 更新用户列表(即发送当前在聊天室的用户到新来的用户列表中)Vector cs = ChatServer.getClients();
if (cs != null)
{for (Enumeration e = cs.elements(); e.hasMoreElements();)
{ClientProc cp = (ClientProc) e.nextElement();
String exist_name = cp.getName();
String exit_sex = cp.getSex();
System.out.println("old" + "&" + exist_name + "&" + exit_sex);
out.println("old" + "&" + exist_name + "&" + exit_sex);
out.flush();}}}
4.4.3文本聊天模块
图4-6 在线好友主界面客户端聊天模块部分代码:
if (e.getSource() == sentButton)
{// 如果监听到发送信息按钮被点击
try
{mywords = inMsgField.getText();
if ((mywords.trim()).length() != 0)
{ // 不能发送空消息也不能都发空格
if (withWho.equals("所有人"))
{outmsg = mywords;// 发送到服务器
out.println(outmsg);
out.flush();// 显示到我的频道里面
insert(myMsgArea, myName + ":" + mywords);
} else
{ // 对某个人交谈
outmsg = "withWho" + "&" + "privateFalse" + "&"
+ withWho + "&" + mywords;
if (privateTalkFlag)
{outmsg = "withWho" + "&" + "privateTure" + "&"
+ withWho + "&" + mywords;
insert(myMsgArea, "您对『" + withWho + "』说: "
+ mywords);
} else
{insert(myMsgArea, myName + " 对『" + withWho + "』说: "
+ mywords);}// 发送到服务器
out.println(outmsg);
out.flush();}}
} catch (Exception ee)
{ee.printStackTrace();
insert(myMsgArea, "与服务器连接中断,请重新登录!");
} finally
{inMsgField.setText(""); // 清空输入框}}
服务器端聊天模块部分代码:
public static void sendAll(String s)
{if (connections != null)
{for (Enumeration e = connections.elements(); // Enumeration过时的接口,// 可以用for each循环
e.hasMoreElements();)
{try
{PrintWriter pw = new PrintWriter(((Socket) e.nextElement())
.getOutputStream());
pw.println(s);
pw.flush();
} catch (IOException ex)
{ex.printStackTrace();
}}}
System.out.println(s);
}
//发送信息给单独一个人
public static boolean sendOne(String name, String msg)
{if (clients != null)
{for (Enumeration e = clients.elements(); e.hasMoreElements();)
{ClientProc cp = (ClientProc) e.nextElement();
if ((cp.getName()).equals(name))
{try
{PrintWriter pw = new PrintWriter((cp.getSocket())
.getOutputStream());
pw.println(msg);
pw.flush();
return true; // 返回值为真,找到了这个人可以进行聊天
} catch (IOException ioe)
{ioe.printStackTrace();
}}}}
return false;// 没有找到这个人,应该是此人已经退出了聊天室}
4.4.4文件传输模块
图4-7 文件传输模块
接受/绝决接受文件:
{if (e.getSource() == acceptfile)
{// 接收文件传输按钮
if (this.acceptfileArea.getText().length() == 0)
{this.insert(myMsgArea, "没有文件需要接受");
} else
{String[] acpfile = filemsg.split("&");
out.println("acceptfile" + "&" + acpfile[1]);
out.flush();
acceptthread = new acceptfilethread();
acceptboolean = true;
// String filepath = acpfile[2];
String filepath = "D:\\a.rar";
JFileChooser jfc = new JFileChooser();
int result = jfc.showSaveDialog(this);
File file = null;
if (result == JFileChooser.APPROVE_OPTION)
{file = jfc.getSelectedFile();
}
filepath = file.getPath();
// 可加弹出框选择保存路径hhhuy
acceptthread.ipport(acpfile[3], (Integer.parseInt(acpfile[4])),
filepath);
acceptfile.setEnabled(false);// 防止重复点接收
acceptthread.start();// }}
if (e.getSource() == refusefile)
{// 拒绝文件传输按钮
if (this.acceptfileArea.getText().length() == 0)
{this.insert(myMsgArea, "没有文件需要接收,拒绝无效");
} else
{String[] acpfile = filemsg.split("&");
out.println("refusefile" + "&" + acpfile[1]);
out.flush();
this.insert(myMsgArea, "你取消了" + acpfile[1] + " 发来的文件");
this.acceptfileArea.setText("");
acceptboolean = false;
acceptfile.setEnabled(true);}}
if (e.getSource() == sendfile)
{// 发送文件按钮
if (withWho.endsWith("所有人"))
{this.insert(myMsgArea, "请选择要发送的目标");
} else
{sendfilename = "";
if (this.sendfileArea.getText().length() != 0)
{sendfilename = this.sendfileArea.getText();}
if (sendfilename.length() == 0)// 没有获得需要发送的文件
{this.insert(myMsgArea, "没有文件发送,请选择欲发送的文件或将其拖入待发送文件框");
} else{ // 发送文件
sendthread = new sendfilethread();
sendboolean = true;
sendfile.setEnabled(false);
sendthread.start();}}}
if (e.getSource() == cancelsendfile)
{// 取消文件发送按钮
if (this.sendfileArea.getText().length() == 0)
{this.insert(myMsgArea, "没有文件发送,不需要取消");
} else
{this.insert(myMsgArea, "你取消了文件发送");
this.sendfileArea.setText("");
if (this.sendboolean)
{out.println("cancelsendfile" + "&" + withWho);
out.flush();
sendboolean = false;
sendfile.setEnabled(true);}}
第5章局域网聊天室系统测试
5.1系统测试结果与分析
首先进行的测试为系统登录、合法性等操作方面的测试。
1. 目的:测试系统登录、合法性检查等基本功能是否达到设计目的。
2. 容:用户登录、合理性检查、合法性检查,系统操作界面显示控制。
输入正确的用户名及服务器地址系统运行,达到设计目的,界面如图5-1所示。
图5-1聊天功能测试
5.1.1用户登陆以及用户列表
个性登陆:登录框包含登陆用户名称,设置服务器和端口,选择性别。
经测试功能正常,如图5-2所示:
图5-2聊天登陆功能测试
图5-3好友在线和显示功能测试
5.1.2文本聊天
1. 群聊功能:任意用户在编辑区编辑文字后点击发送,所有在线用户都能收到聊天容。
测试结果正常,如图5-4、5-5所示。
5-4好友之间进行文字聊天功能测试
5-5好友之间进行文字聊天收发功能测试
2. 私聊功能:
私聊:若在用户显示界面双击某位在线用户之后并且在聊天室最下面勾选私聊,则可以进行私聊。
只有聊天双方在悄悄话界面看到自己的聊天容。
功能截图如图5-6、5-7所示:
图5-6悄悄话聊天功能测试
图5-7悄悄话聊天功能测试
3. 字体设置:
在编辑器录入文字时可对文字字体进行编辑。
测试结果正常,如图5-8所示。
图5-8文字字体设置功能测试
5.1.3文件传输功能
文件传输功能:用户在用户显示界面将文件拖入到文件传输框之中,点击文件传输按钮,便可进行文件传输,在传输时也可以点击取消按钮取消文件的传输。
接收方看到有可以接受文件的提示后,点击文件接受,可以接受文件,也可以点击拒绝接受,拒绝文件的传输,经测试功能正常,如图5-9所示。
图5-9文件传输功能测试1
图5-10文件传输功能测试2
5.2本章小结
经过对局域网聊天室的测试,基于时间关系,系统只有实现两个基本功能,正对这两个功能,进行测试后发现:局域网聊天室可以实现文字聊天的功能,而且能够快速便捷的传输消息。
群聊区面板可以实现在线所有好友的聊天功能,悄悄话聊天面板实现俩人的快速聊天。
文件传输模块可以实现客户端与客户端之间的文件传输功能,实现及时的文件传递和接受。
系统可靠稳定运行,实现了局域网的及时可靠的聊天功能。
可以帮助企业实现在部局域网的帮助下,通过局域网聊天软件,企业员工可以随时的进行即时消息传递,召开网络会议等,有利于提高工作效率,同时又保护了企业部信息的安全。
企业得以简化信息流程,提高信息交换的速度,从而提高工作效率,它为人们的交流提供了一个平台出于高效、快速地处理各种事务的作用。