java聊天系统终结版.docx
《java聊天系统终结版.docx》由会员分享,可在线阅读,更多相关《java聊天系统终结版.docx(15页珍藏版)》请在冰点文库上搜索。
java聊天系统终结版
基于C/S构架的Java在线聊天系统
指导老师:
谢卫星
参与人员:
韦永城20094350207
胡瀛寰20094350208
戴传友20094350222
雷富明20094350230
覃菲菲20094350236
戴艳辉20094350240
第一章引言
随着科技的进步,计算机网络的发展日新月异。
Intenet在人们的心中地位也越来越重要。
其中在线聊天系统尤为重要,也是人们最早在网络的接触到的。
●模块分工
界面设计:
戴燕辉、覃菲菲
代码编辑:
Ø需求分析:
胡瀛寰、韦永城
Ø模块设计:
胡瀛寰、戴传友
Ø服务器端:
戴传友、雷富明
Ø客户端:
韦永城、雷富明
系统测试:
韦永城、戴传友、胡瀛寰
实验报告编辑:
戴燕辉、覃菲菲
1.聊天系统的简介:
在线聊天系统是互联网站一种极为常见的互动沟通交流服务.聊天系统可以向网友提供开放性的聊天服务,网友们可以在此互相发表自己的某些观感,交流某些技术,经验乃至人生的感悟与忧欢,结交更多的朋友
(1)讯息区
是显示聊友对话内容的区域.为了方便聊友观看和个人有关的对话.
(2)在线名单区
线上名单中间的数字是在线聊友的人数.线上名单下面的分别是聊友的性别,呢称,和聊友的资料。
(3)发言区
让聊中间的数字是在线聊友的人数.
(4)功能区
刷新名单显示新聊友的名字.
(5)查找聊友功能可以查找你想找的聊友
(6)修改资料功能在本聊天室注册的聊友可以随时修改个人资料.
2.设计思想
在互联网上,传统的网站或用户都使用类似于Email(电子邮件)的形式互相发送信息来进行一系列的交流.但这种异步交互的办事效率可见是很低的.为提高效率,让用户之间能达到实时交互的目的,所以出现了可以实时交流信息的聊天室,来满足用户的需求
(3)Java实现简单的服务器和客户端
利用Java实现一个简单的服务器需要5个步骤;
第一步,创建一个serversocket类的对象。
第二步,建立侦听。
建立侦听是由serversocket类的accept函数完成。
第三步,获取用于与远程客户端通信的outputstream对象和intputstream对象。
第四步,利用objectoutputstream类的writeobject函数,进行数据的准备,并利用objectoutput类的flush函数,将函数发送出去。
第五步,当传输结束后,调用socket的close方法,关闭连接。
利用
Java实现一个简单的客户端需要4个步骤;
第一步,创建socket类对象,用做连接套接字。
第二步,绑定和连接的套接字。
用于数据的发送与接收。
第三步,获取用于与远程服务器通信的outputstream对象和intputstream对象。
第四步,当客户端完成通信,通过socket的close方法关闭连接。
设计分析
网络通信流程图
类图
//连接服务器并接受消息
publicvoidgetMessage()
{
ServerSocketserver;
Socketsocket;//创建流套接字
Stringinfo="";
try
{
server=newServerSocket(5555);
for(inti=1;i<=60;i++)System.out.print("-");
System.out.println("\n服务器程序已经启动\n连接中........");
UserCount++;
while(true)
{
socket=server.accept();
BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));
PrintWriterout=newPrintWriter(socket.getOutputStream(),true);
info=in.readLine();
if(info!
=null)
{
showMessage(info);//显示已发消息
//System.out.print(info);
}
out.close();
in.close();
socket.close();
if(UserCount==0)//0为不限制连接人数。
break;
}
server.close();// 关闭服务器端流套接字
}
catch(Exceptione)
{
System.out.println(e.toString());
}
}
3.实现聊天系统的需求分析
采用c/s结构,考虑共有5个需求:
(1)建立侦听服务
这个需求是服务器端的需求。
(2)用户登录
包括客户端请求登录以及服务器端响应登录两个过程。
(3)收发聊天信息
包括客户端发送聊天信息以及服务器端转发聊天信息两个过程。
(4)收发系统信息
由服务器端发送给客户端的信息。
(5)服务器关需要完成的任务
3.开发工具和相关技术简介
(1)JavaScript
JavaScript是由Sun公司及网景Netscape公司开发的.它可以让你设计交互的网页内容,但不能单独执行,必须在浏览器或服务器上执行。
Java具有强大的网络编程功能,它提供了了基于Socket的通信方式(Socket-basedcommunication),使得应用程序可以像读写文件一样Socket读取数据和向Socket写入数据。
(2)TCP/IP和UDP/IP
socket程序的两种通信协议,为Java支持。
UDP:
数据报通信(DatagramCommunication)协议,为无连接协议,可以在任何时候发送数据报。
TCP:
流通报通信协议,面向连接的协议。
使用UDP,每一次发送数据报时,都要随之一起发送本地的描述符与接收方的socket地址,使用TCP则不需要如此,但TCP需要建立连接的时间,而使用UDP则需要更多的信息。
使用UDP要求你发往指定位置的数据报不能超过64KB,而在TCP中没有这样的限制。
UDP协议是一个不太可靠的协议,因为它无法保证你所发送的的数据报以同样的顺序被接收方接收。
相比较而言,TCP协议则要可靠的多,因为它能保证你所发送的包以同样的顺序被接收。
简而言之,TCP用于实现不受传输数据长度限制的网络服务,如远程登录(rlogintelenet).FTP等,UDP复杂程度较底,开销也小,主要使用在构建与句域之上的分布系统中,客户/服务器应用于程序的实现,一般情况下,最好用TCP,因为它提供了可靠的.面向连接的通信方式。
//发送消息
voidbutton1_actionPerformed(ActionEvente)
{
Stringmessage="";
Stringip="";
Socketconnection;
try
{
Stringname="";
ip=(String)jComboBox1.getSelectedItem();
name=jTextField1.getText();
if(textArea1.getText().equals(""))
{
Stringts="警告:
消息不允许为空!
消息没有发送成功!
";
JOptionPane.showMessageDialog(null,ts,"警告,JOptionPane.WARNING_MESSAGE);
//showMessage(ts);
}
else
{
connection=newSocket(InetAddress.getByName(ip),5555);
//BufferedReaderSvrIn=newBufferedReader(newInputStreamReader(connection.getInputStream()));
PrintWriterSvrOut=newPrintWriter(connection.getOutputStream(),true);
message=textArea1.getText();
showMessage("来自"+ip+">"+message);
第二章聊天室总体分析和设计
1.聊天系统运行原理
聊天系统最基本的原理就是:
从客户端收集消息,然后通过服务器端消息分发程序中转,将全局消息发送给的所有用户.
2.网络聊天程序的功能和主要技术
基于TCP协议的网络聊天程序必须包括服务端和客户端两个程序,其中一台计算机上运行服务端程序,在创建服务端程序时,设置一个监听端口(LocalDort)并调用listen方法。
当客户端连接时(connect)就会触发connectionrequest事件,在connectionrequest事件中调用accept方法建立连接,同时在服务端的DataArrival事件中,把接收到的客户端传来的数据,转发给所有客户端。
对于客户端程序必须知道服务端计算机名或其IP地址(RemoteHost属性),以及服务端监听端口(RemotePORT属性)然后调用connect方法建立连接任何客户端一方都可以发送.接收对方数据。
其中数据调用DataArrival事件,在DataArrival事件中的GetData方法就可以获得传送来的数据。
3.聊天系统的功能分析
聊天系统的功能需求进行分析,首先,聊天系统采用c/s架构,由服务器和客户端组成。
聊天系统服务器必须具有以下功能:
(1)启动服务器,建立侦听,接受客户端连接
(2)接收.分析.转发聊天信息
(3)向客户端发送系统信息
(4)关闭服务,并向客户端发送服务器关闭消息。
为实现以上4种聊天服务器功能,需要建立以下四个类。
(1)用户信息链表类:
该类提供一个链表数据结构及对一组链表的操作函数,用于保存用户信息;它提供了链表的添加.删除.查找的基本功能。
(2)服务器主框架类:
主框架类不仅提供了服务器的人机交互界面,而且在其中实现了服务器的启动和关闭以及服务器系统消息的发送功能。
(3)服务器侦听线程类:
该类的父类为Thread类,它负责接收客户端的信息,并且对信息类型作出判断和相应的响应。
比如,当它收到客户端下线信息,就会调用相应的函数,响应用户下线的请求。
聊天客户端必须具有以下功能:
(1)连接服务器,发送用户登录请求。
(2)向服务器发送聊天信息
(3)接收服务器转发的聊天信息
(4)接收服务器发送的系统信息
(5)响应服务器关闭通知消息。
为实现以上5种聊天客户端功能,需要建立以下二个类。
(1)客户端主框架类:
客户端主框架类除了完成与用户的交互作用外,它还实现了用户的登录与下线的功能,以及聊天信息的发送功能。
(2)客户端接收线程类:
接收线程类的父类为Thread类,在该类中实现了信息接收的功能。
该线程一经启动,就一直处于接收信息的状态,直到用户下线或服务器关闭。
其中响应服务器关闭的功能也是在接收线程类实现的。
第三章.聊天系统的实现
聊天系统具有完整的会话功能,服务器具有建立侦听服、转发聊天信息响应用户下线、发送系统消息的功能,客户端具有请求登录、请求下线、发送聊天信息、接收聊天信息、接收系统消息的功能,下面通过对聊天系统的演示,了解聊天系统的功能需求。
1.建立侦听服务
初始状态的服务器主框架上有两个按钮startserver和stopserver,分别用于启动服务器和关闭服务器。
在初始状态时,按钮startserver处于允许状态,而按钮stopserver处于禁止状态。
单击startserver即可启动服务器。
当服务器成功启动后,会在界面上的JTextArea控件上显示提示信息,并且将startserver按钮设为禁止,而将stopserver按钮设为允许。
服务器启动后,就进入侦听状态。
2.用户登录
用户登录的过程实际上是客户端请求登录和服务器响应登录两个过程。
初始状态有具有两个按钮login和logout,分别用于用户登录和用户下线。
在初始状态时,按钮login处于允许状态,而按钮logout处于禁止状态。
客户端主界面最下方的JTexField控制,在客户端未登录时,用于输入用户昵称。
在客户端登录后,用于输入聊天信息。
单击login按钮即可向服务器发出登录请求。
当服务器端接收到用户的登录请求后,就将该用户的相关信息保存在内部的数据结构中,改用户将视之为在线,并且服务器会向其他所有在线用户发送改用户的上线通知消息,而且随之会有所在的在线用户发送最新的用户列表,就用此刻列表中的用户信息更新原有的用户列表,并将其添加到界面上的JComboBox控件中。
3.收发聊天信息
收发聊天信息的过程实际上包含了客户端发送聊天信息和服务器转发聊天信息两个过程。
当客户端进行登录,并且已经获得在线用户列表后,就可以与其他的在线用户进行聊天,用户在客户端最底部的JTexField控制中输入聊天信息,并输入Enter键,聊天信息就会被发送出去。
JTexField上方的两个JComboBox控件分别用来选择聊天信息的目标对象和发送聊天信息时的表情动作。
当服务器收到某个在线用户的聊天信息后,它会根据用户指定的目标对象,准确地把聊天信息发送给特定的用户。
(1)用户信息链表类:
该类提供一个链表数据结构及对一组链表的操作函数,用于保存用户信息;它提供了链表的添加.删除.查找的基本功能。
(2)服务器主框架类:
主框架类不仅提供了服务器的人机交互界面,而且在其中实现了服务器的启动和关闭以及服务器系统消息的发送功能。
(3)服务器侦听线程类:
该类的父类为Thread类,它负责接收客户端的信息,并且对信息类型作出判断和相应的响应。
比如,当它收到客户端下线信息,就会调用相应的函数,响应用户下线的请求。
4.收发系统信息
系统信息的收发与聊天信息的收发不同,它只是单方向的,只能有服务器发给客户端,在服务器主界面低部的JTexField控制中输入系统信息,并键入Enter键,系统信息将被发送到所有客户端。
当客户端接收到服务器发送的系统消息后,则将系统消息显示在界面上。
5.服务关闭
当服务器关闭服务时,就向所有在线用户发送服务器关闭消息,并且关闭所有在线用户相连接的输入输出流和套接字,将且将界面调整到初始状态。
当客户端接收到服务器的关闭消息时,它将在界面上显示服务器关闭的提示信息,并且关闭与服务相连的输入输出流和套接字,删除在线用户列表,并将界面调整到初始状态。
第四章结论
本文介绍了Internet的聊天系统的不同特点和技术分析,逐步分层分析讲解了聊天系统的实现,系统用jdk1.4版作为开发工具,最后的工作并没有打包需要jdk1.4或以上的版支持才能够运行,运行分为服务器和客服端,只有在客户端运行正常的情况下,各客户机才能正常的通信。
通过本次实验我们有少许学习心得
1.对java编程有了一定得了解,深入了解了TCP传递消息的机制。
2.熟悉对eclispe这一软件和其上的一些组件的使用。
3.对网络编程产生了一些兴趣。
参考文献
《Java基础教程》
《JAVA技术内幕》
《THINK IN JAVA》网络资料
《java网络编程》网络资料