基于TCPIP的局域网聊天室的设计与实现Word下载.docx
- 文档编号:21765803
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:31
- 大小:971.75KB
基于TCPIP的局域网聊天室的设计与实现Word下载.docx
《基于TCPIP的局域网聊天室的设计与实现Word下载.docx》由会员分享,可在线阅读,更多相关《基于TCPIP的局域网聊天室的设计与实现Word下载.docx(31页珍藏版)》请在冰豆网上搜索。
【Keywords】Socket;
TCP/IP;
C/S;
LocalAreaNetworkChatRoom
第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].
2国内外研究现状
基于局域网的即时通信工具,实际上是互联网即时通信工具的一个小规模版本,广域网上的即时通信工具,如今一般采用UDP或者TCP协议体系来实现,开发技术已经比较成熟,比如较早的MSN,ICQMessanger,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。
2系统基本流程图
图2—1聊天系统工作流程图
1.3性能要求
首先要求程序要完全可靠,可以应付种种由于系统问题产生的错误,比如初始网络失败,对方突然下线等。
要求提前设想到类似的尽可能多的可能发生的事件,做出相应的应对措施,并向用户提交简单易懂清晰明白的提示信息。
程序要有良好的容错性,当用户进行非法操作时或者系统本身出现问题时要能以最好的方式退出程序,避免发生程序假死现象。
开发文档要有好的便于理解性,如果系统又要交由别人接手开发,或者自己由于种种原因需要进行二次开发,那么要保证以后能够清晰的理解整个系统的设计思路以及实现细节。
要求程序对所运行之系统的硬件条件要求尽可能低,运行时内存占用尽可能小,响应速度要尽可能快。
并且不发生内存泄漏之类影响系统运行的错误事件。
并且要求易于维护及扩展.所以应该采用模块化开发,各个模块之间不要有太多的联系,以免维护困难。
2.1.4测试环境规定
在开发完成以后,自己进行一个全面的测试。
检测系统中存在的漏洞,进行修复。
2.2可行性研究
2.2.1成本可行性分析
本系统是局域网聊天工具,适用于公司、学校、社团等团体局域网使用,故对硬件、网络等设备要求较低,从而经济成本很低,在未来真正作为企业使用时也没有很高的成本要求。
现阶段,因为本软件只做开发学习使用,在校期间花费时间,在此期间通过自己学习和查阅图书以及询问老师获得相关知识和方法,并没有其他的支出,而且现阶段只做学习暂且不考虑经济成本及盈利问题.
2.2技术可行性分析
首先我已经搭建好开发所需要的软硬件平台,并进行了合理而完善的需求分析,做好了充分的前期准备工作,其次因为本程序的平台将基于WINDOWS,将要使用网络通信技术,而WINDOWS有完善成熟的网络通信接口,以及与JAVA开发环境的严密契合能力,加之相类似的更大规模的INTERNET通信工具产品也已有例在先,所以这个程序的开发可行性在技术上是完全可行的.
2.3系统开发环境的分析
系统采用JAVA作为开发语言、Eclipse作为开发工具,系统的设计从需求分析开始,就保证了系统的稳定性和可扩展性.JAVA语言是一种面向对象的编程语言,具有很好的移植性、并且更加的安全和并发性,这使得JAVA语言各线程能够并发进行。
并且JAVA支持可视化图形界面,使得操作更加直观。
2.4数据流图
2.4。
1顶层数据流图
图2-2聊天系统顶层数据流图
2一层据流图
图2—3聊天系统一层数据流图
第3章系统设计
1
2
3
3.1设计目标
同一个局域网中,如何根据自身业务的要求,量身定制,选择一套有效的局域网聊天室系统。
如何来满足局域网内部用户的通讯要求,在考虑到网络传输实时性,这现代社会通讯所必需的.设计本系统时,分析网络承载、整个系统结构的组建等是实现局域网文字聊天所必需的.
局域网聊天作为一种广泛的网络应用对其基础的承载网络环境的要求较低。
局域网聊天的功能和应用效果体现在客户端,而服务器端则是必不可少的,对于系统的需求分析在系统设计的过程中应该明确、细致:
1.用户登录:
设立一个服务器,实现多个用户及时通信。
用户在登陆时候输入明确的用户名称,以便各用户之间能够识别.
文本聊天:
聊天室的功能即所谓的群聊,聊天的内容所有的人都能够看到,保密聊天室的功能即所谓的私聊,只有聊天双方才能看到。
用户还可以对字体进行修改。
3.文件传输:
多线程,收发可随时进行,相互之间没有相互影响,文件传输速度快.
3.2构建开发环境
硬件平台
CPU:
P41。
8GHZ;
内存:
256MB以上
软件平台
操作系统:
windowsXP或window7
开发工具包:
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.1TCP套接字的运用
在文字聊天时,服务器端与客户端的连接是采用的TCP套接节进行连接.TCP套接字的使用如图4-1.创建Socket对象SocketServer来处理服务器端与客户端的连接,Socket是WindowsSocketAPI的高层抽象。
Socket通常和其他类类混合使用,这两个类负责数据的发送和接收[17]。
要使用Socket对象,首先要调用构造函数,然后调用Create函数创建一个Socket[9]。
Socket和TCP的工作流程如下图所示:
图4-1TCP套接字的使用
4.2TCP三次握手协议
第一次握手:
源主机通过发送一个数据帧来请求本次的连接。
第二次握手:
当目的主机收到源主机发送的这个请求帧之后,发送一个带有源端机连接序列号和本次连接序号的确认帧表示同意连接。
第三次握手:
源端机等待接收两次初始应答的序列号之后,就向目的主机发送一个带有两次连接序列号的确认[10]。
具体过程如下:
主机A主机B
SYN=1,SEQ=
ACK=1,SYN=1,SEQ=
aaaaaaaaaa
图4-2网络传输的三次握手
3程序结构
3。
1多用户在线方案:
采用客户端/服务器(C/S)的和JAVA中多线程结构模式。
服务器通过监听来判断是否有客户端请求登陆并予以响应,而客户端则是在需要登陆时候提交登陆请求以便服务器进行监听.服务器通常情况下是始终运行的,用来监听各个网络端口,一旦收到客户端的请求,就需要立即启动一个进程来响应客户端的服务。
于此同时,服务器还将继续监听服务的各个端口,以便后来的客户端也能及时的接收到响应。
在这个过程中,很多线程被创建,线程的轮转是有时间片限定的,而这个时间片非常的小,对于客户端来说基本感觉不到,就像所有的线程都是在同时进行的[10].
多线程的工作原理如下图所示:
图4-3多线程在线
4.3。
2软件框架
Users
SendOne
SendAll
FileTrans
UserList
Connect
Client
Server
TCPSocket
图4-4软件主题框架
4.4代码实现
4.1用户登陆模块
图4—5用户登陆模块
客户端登陆模块部分主要代码如下:
classConnectextendsJFrameimplementsActionListener,ItemListener,
{
publicvoidlink()throwsException
{//连接服务器
hostName=hostText。
getText()。
trim();
port=Integer.parseInt(portText。
getText());
client=newSocket(hostName,port);
//创建一个流套接字并将其连接到指定IP地址的指定端口号.
in=newBufferedReader(newInputStreamReader(client。
getInputStream()));
out=newPrintWriter(client.getOutputStream());
out。
println(nameText。
getText()+”&
”+sex);
flush();
}
}
服务器端登陆模块部分主要代码如下:
publicstaticvoidaddConnection(Sockets,ClientProccp)
{if(connections==null)
{connections=newVector<
Socket>
();
connections。
addElement(s);
if(clients==null)
{clients=newVector〈ClientProc>
();
clients。
addElement(cp);
publicstaticvoiddeleteConnection(Sockets,ClientProccp)
throwsIOException
{if(connections!
=null)
{connections。
removeElement(s);
s.close();
if(clients!
{clients.removeElement(cp);
}}
publicstaticVectorgetClients()
{returnclients;
4.4。
2用户列表模块
图4—6在线好友主界面
客户端用户列表部分代码如下:
publicvoidvalueChanged(ListSelectionEvente)
{//监听下拉列表的显示内容
if(e。
getSource()==peopleList)
{try
{Stringselect=(String)peopleList.getSelectedValue();
if(select!
{//确保选择非空
String[]userInfo=select。
split("
〖”);
Stringname=userInfo[0].trim();
//提取名字
if(!
name.equals(chf。
myName))
{//不能添加自己
intcount=chf.perponsComboBox.getItemCount();
for(inti=0;
i〈count;
i++)
{chf.perponsComboBox.setSelectedIndex(i);
//选择第i项
StringstrName=(String)chf。
perponsComboBox
.getSelectedItem();
if(name.equals(strName))
{//如果已经在列表中,就复合框中选中,所以要确保没有重名
return;
}}
//如果没有添加,就会执行下面语句添加
chf。
perponsComboBox。
addItem(name);
}catch(Exceptionee)
{System.out。
println(”发生错误在valueChanged”+ee);
}}}
服务器端用户列表模块部分代码:
publicStringgetName()
{returnname;
publicStringgetSex()
{returnsex;
publicSocketgetSocket()
{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 TCPIP 局域网 聊天室 设计 实现