网络课程设计.docx
《网络课程设计.docx》由会员分享,可在线阅读,更多相关《网络课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
网络课程设计
JISHOU UNIVERSITY
专业课课程论文
题目:
基于TCP协议聊天室系统
作者:
学号:
所属学院:
信息科学与工程学院
专业年级:
总评分:
完成时间:
吉首大学信息科学与工程学院
摘要
当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用,并且随着Internet的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室,在此设计了一个简单的基于TCP协议的聊天室。
服务器端:
启动、停止服务器;显示当前客户端链接信息;向所有客户端传送服务器公共信息;实现客户端双人和多人聊天功能。
客户端:
聊天服务器配置信息的修改、保存;客户端链接服务器的登录;接收服务器公共信息;显示当前所有聊天用户信息;选择聊天用户实现双人或多人聊天功能。
关键字:
聊天室、TCP协议;
Abstract
Thecurrentisthedigitalinformationage,thenetworkera,anykindofeditingtoolscannotbeignoredintheapplicationonthenetwork,andwiththepopularityofInternetandbroadbandtechnologymatures,moreandmoreusersintothenetworkintheworldtoenjoythenewsthatbrowse,queryinformation,sende-mail,onlinemovieservice,enjoytheconveniencebroughtbytheInternetandofficeefficiency,atthesametimeanewWebappforInternetuserstoprovidearealtimecommunicationfunctionandplaces,thisisachatroom,inthedesignofasimpleprotocolbasedonTCPchatroom.
Server:
start,stoptheserver;displayingthecurrentclientlinkstoalltheclientserverinformation;publicinformation;therealizationofclientdoubleandchatwithpeople.
Client:
chatserverconfigurationinformationchanges,save;clientlinkedserverloginserver;receivingpublicinformation;displayingthecurrentchatalluserinformation;theselectionofchatusersrealizethedoubleorchatwithpeople.
Keywords:
chatrooms,TCPprotocol;
目录
摘要I
AbstractII
第一章需求分析1
1.1用户需求1
1.2需求环境1
1.3聊天室的功能描述1
第二章概要设计(总体设计)2
2.1流程图2
2.2聊天室的功能设计2
2.2.1定义类Server.JAVA2
2.2.2定义类ServerConnection.java3
2.2.3类ServerMessageThread用来处理用户的聊天信息3
2.2.4类Client主要为界面设计3
2.2.5类ClientConnection3
2.2.6类ChatClient聊天主窗口界面4
2.2.7ChatPerson输入聊天对象4
2.2.8ChatOneToOne用于发送私聊信息4
第三章系统实现及测试运行界面5
3.1服务器端实现的主要代码5
3.1.1服务器监听指定的端口5
3.1.2向客房端发送信息6
3.2客户端实现的主要代码6
3.2.1连接服务器6
3.2.2向服务器发送数据7
3.3测试运行界面8
3.3.1启动服务器界面8
3.3.2客户端登录界面9
3.3.3群聊界面9
3.3.4输入私聊对象界面10
3.3.5输入私聊信息界面10
3.3.6私聊对象收到信息界面10
第四章相关知识11
4.1Socket类11
4.2TCP协议11
4.3Server-Client模型的程序的开发原理11
第五章课程设计总结13
参考文献14
第一章需求分析
1.1用户需求
(1)服务端:
用户能启动和停止服务器
(2)服务端:
用户能修改服务器接口
(3)服务端:
用户能看到当前客户端的信息
(4)客户端:
用户能看到服务端传来的信息
(5)客户端:
用户能修改,保存服务器的配置信息
(6)客户端:
用户能看到所有聊天用户信息
(7)客户端:
用户可以和指定的人聊天
1.2需求环境
本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:
①硬件要求:
一台计算机。
②软件配置:
windowsXP或windows7、MyEclipse9.0。
1.3聊天室的功能描述
本课程设计是基于TCP协议的聊天室系统,其基本的功能描述如下:
1启动和停止服务器,能显示用户信息,能向客户端发送所有用户信息,能向用户发送客户端传送的信息。
2启动和关闭客户端,能接受并显示服务器发送来的客户信息和聊天信息,能和某个用户通过服务器中转进行双人聊天
第二章概要设计(总体设计)
2.1流程图
2.2聊天室的功能设计
2.2.1定义类Server.JAVA
设计服务器界面,在Server中能设置服务器的端口,显示用户列表信息,并将port信息传递给用来连接客户端的类。
1.用方法initComponents()来初始化服务器界面,并向XML传送服务器窗口关闭信息。
2.用方法execute(ActionEventevt)获得用户输入的端口号,并创建ServerConnection(Serverserver,intport)对象。
2.2.2定义类ServerConnection.java
用来连接客户端,并对用户登录做判断,在本类中将会生成socket用来处理各种信息。
1.用构造方法来获得用Server类传递的端口,并初始化ServerSocket。
2.方法run()来获得客户端发送的连接信息,并对用户登录做判断,如果登录成功将会创建新的线程,用来处理用户的聊天数据,并将用户的信息添加到MAP()中,调用updateUserList()对客户端和服务器断的用户列表做更新。
2.2.3类ServerMessageThread用来处理用户的聊天信息
1.updateUserList()用来更新用户列表
2.sendMessage(Stringmessage)用来发送信息
3.run()获得客户端发送来数据,并用XML解析消息类型,调用sendMessage()方法将消息发送出去,主要处理多人聊天和双人聊天和关闭窗口
2.2.4类Client主要为界面设计
1.initComponents()用于初始化界面
2.login(ActionEventevent)获得并提交用户信息包括用户名、端口号、IP地址以及创建连接服务器线程
2.2.5类ClientConnection
1.构造方法接受类Client传递的信息,调用connect2Server创建线程获得输入输出流
2.login()向服务器发送用户登录信息,读取服务器的响应结果,用XML对用户信息进行解析
3.sendMessage(Stringmessage,Stringtype)
用于客户端向服务器端发送聊天数据(发送聊天数据,关闭窗口,向服务器发送数据)
4.run():
调用XML的extractUserList(Stringxml)方法解析type值
处理相关信息
2.2.6类ChatClient聊天主窗口界面
1.对3个按钮分别添加事件,发送按钮调用sendMessage()方法,清屏按钮调用setText()对聊天窗口的信息进行清除私聊按钮启动私聊窗口
2.sendMessage(ActionEventevent)获得聊天数据
2.2.7ChatPerson输入聊天对象
1.init()主要设计界面,
2.向ChatOneToOne传递聊天对象
2.2.8ChatOneToOne用于发送私聊信息
1.init()初始化界面
2.sendMessage(ActionEventevent)
用来获得用户输入的私聊信息,并将信息保存在XML里面,等待解析
第三章系统实现及测试运行界面
3.1服务器端实现的主要代码
3.1.1服务器监听指定的端口
publicvoidrun()
{
while(true)
{
try
{
Socketsocket=this.serverSocket.accept();
InputStreamis=socket.getInputStream();
OutputStreamos=socket.getOutputStream();
byte[]buf=newbyte[5000];
intlength=is.read(buf);
//客户端发来的连接信息(包括了用户名)
StringloginXML=newString(buf,0,length);
//从客户端登录数据中提取出用户名信息(username)
Stringusername=XML.extractUsername(loginXML);
StringloginResult=null;
//判断用户是否登录成功
booleanisLogin=false;
//判断用户名是否重复
//用户名重复
if(this.server.getMap().containsKey(username))
{
loginResult="failure";
}
//用户名不重复
else
{loginResult="success";
isLogin=true;
}
Stringxml=XML.constructLoginResultXML(loginResult);
os.write(xml.getBytes());
//如果用户登录成功,启动线程
if(isLogin)
{//准备创建新的线程,用于处理用户的聊天数据,每一个连接上的用户都会对应一个该线程
ServerMessageThreadserverMessageThread=newServerMessageThread(server,socket);
//将用户名及与之对应的线程对象放到Map中
this.server.getMap().put(username,serverMessageThread);
//更新用户列表(服务器端+客户端)
serverMessageThread.updateUserList();
serverMessageThread.start();}}
catch(Exceptionex)
{ex.printStackTrace();}}}
3.1.2向客房端发送信息
publicvoidsendMessage(Stringmessage)
{
try
{
os.write(message.getBytes());
}
catch(Exceptionex)
{
ex.printStackTrace();
}
}
3.2客户端实现的主要代码
3.2.1连接服务器
publicClientConnection(Clientclient,StringhostAddress,intport,Stringusername)
{
this.client=client;
this.hostAddress=hostAddress;
this.port=port;
this.username=username;
//连接服务器
this.connect2Server();
}
//连接服务器,由构造方法调用
privatevoidconnect2Server()
{
try
{
this.socket=newSocket(this.hostAddress,this.port);
this.is=this.socket.getInputStream();
this.os=this.socket.getOutputStream();
}
catch(Exceptionex)
{
ex.printStackTrace();
}
}
3.2.2向服务器发送数据
publicvoidsendMessage(Stringmessage,Stringtype)
{try
{
intt=Integer.parseInt(type);
Stringxml=null;
//客户端向服务器端发送聊天数据
if(CharacterUtil.CLIENT_MESSAGE==t)
{xml=XML.constructMessageXML(this.username,message,2);}
//客户端向服务器端发送关闭窗口的数据
elseif(CharacterUtil.CLOSE_CLIENT_WINDOW==t)
{
xml=XML.constructCloseClientWindowXML(this.username);
}
//向服务器端发送数据
this.os.write(xml.getBytes());
System.out.println(xml);
}
catch(Exceptionex)
{ex.printStackTrace();
}}
3.3测试运行界面
3.3.1启动服务器界面
3.3.2客户端登录界面
3.3.3群聊界面
3.3.4输入私聊对象界面
3.3.5输入私聊信息界面
3.3.6私聊对象收到信息界面
第四章相关知识
4.1Socket类
Socket类为网络通信提供了一套丰富的方法和属性。
Socket类允许您使用ProtocolType枚举中所列出的任何一种协议执行异步和同步数据传输。
Socket类对异步方法遵循.NETFramework命名模式。
例如,同步的Receive方法对应于异步的BeginReceive和EndReceive方法。
4.2TCP协议
TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于点对点的通讯。
TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。
TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
4.3Server-Client模型的程序的开发原理
服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。
客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。
客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。
要学Internet上的TCP/IP网络编程,必须理解Socket接口。
Socket接口设计者最先是将接口放在Unix操作系统里面的。
如果了解Unix系统的输入和输出的话,就很容易了解Socket了。
网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。
Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
第五章课程设计总结
1.在这次课程设计中,我们基本完成任务了,本次设计用到JAVA中图形界面设计,匿名内部类,XML,鼠标事件等等
2.通过这次设计,我们发现做一个稍微大点的程序首先要设计好,我们首先就是因为设计问题,做完多人聊天的时候,发现很难做双人聊天了,因为我打算模仿QQ群,双击用户即可对其进行双人聊天,但是我在保存用户信息的时候添加的到MAP中的用户信息是String类型而不是JLabel等等可以添加事件的数据类型,所以最后只要用输入用户名来进行多人聊天,为了让服务器进行判断所以不允许重名的用户,就是因为设计没考虑周全,拿了题目就开始写代码,以至于做到后面遇到困难。
3.做一个技术人员,现用现学很重要,对于客户端向服务器传送数据首先我们是用String进行传递,后来有高手告诉我们用XML好,清晰扩展性强,所以我们采用了XML用来保存和传递数据,对于XML开始我们都没要接触过,后来通过看视屏,大致能使用XML进行简单的操作
参考文献
[1]圣思园张龙JAVAse视频
[2](美)埃克尔著陈昊鹏译《JAVA编程思想》(机械工业出版社)
[3]萨维茨著朱剑平、刘颖译《Java语言计算机科学与程序设计》(清华大学出版社)
[4]王晓东著《通信网络序设计》(西安电子科技大学出版社)