当前位置:文档之家› JAVA简单聊天室的设计

JAVA简单聊天室的设计

JAVA简单聊天室的设计与实现 2011-07-16 09:20:04| 分类: 科学技术 | 标签: |举报 |字号大

小 订阅
摘要:本系统是java基于c/s模式的简易聊天室程序。聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器端才能实现正常的聊天功能。基于Java的聊天室是利用Eclipse开发包工具进行开发出的一款网络聊天室。这款聊天室是套接字通信开发采用c/s模式的聊天室程序。聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器端才能实现正常的聊天功能。
关键词:JAVA 聊天室 服务器端 客户端
1、需求
在当今的信息时代,越来越多的聊天工具被应用。Java语言是当今流行的网络编程语言,它具有面向对象、与平台无关、安全、多线程等特点。使用Java语言能够为小型的、嵌入式设备进行应用程序的开发。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。一个操作简单,界面友好、运行稳定的聊天室对于小型局域网的用户可以起到很好的交流作用。
根据目前使用聊天室的用户需求显示,用户对于聊天室主要有以下几点要求:
(1)、 与聊天室成员一起聊天,可以与聊天室成员私聊
(2)、 可以改变聊天内容风格,用户注册(含头像)、登录
(3)、服务器,服务器过滤非法内容。
(4)、 服务器发送通知,保存服务器日志,保存用户聊天信息。
该简易聊天室,和许多大型的网络聊天室相比功能比较简单,但能实现基本的聊天功能,点对多、点对点聊天和基本的用户功能,登录、查看在线用户等。
2、设计
2.1设计思路
Java是一种简单的、性能很优异的语言。Java去掉了C++语言的许多功能,如:指针运算、结构、这让Java的语言功能很精炼,并增加了一些很有用的功能,如自动收集碎片。而且,Java很小,整个解释器只需215K的RAM。
因此运用JAVA程序编写聊天室,实现简单聊天功能。本设计做的是Java简单聊天室,它是图形界面、线程、流与文件等技术的综合应用,其界面主要采用了java.awt包,javax.swing包等。 程序实现了聊天室的基本功能,其中有:
(1)启动服务器:实现网络的连接,为注册进入聊天室做准备。
(2)注册登陆界面:填写基本信息如姓名等,可以供多人进入实现多人聊天功能。
(3)发送信息:为用户发送信息提供平台。
(4)离开界面:使用户退出聊天室。
(5)关闭服务器:断开与网络的连接,彻底退出聊天室。
2.2设计方法
在设计简单聊天室时

,需要编写5个Java源文件:Server.java、Objecting.java、LogIn.java、ClientUser.java、Client.java。
聊天室除了需要编写的上述5个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JTextField、JTextArea和File类。
2.3运行环境
CPU:AMD AM2 Athlon 64 X2 5000+
内存:2G以上
硬盘空间:500G以上
操作系统:Windows XP sp3
运行环境:JDK、JCreator 、Eclipse、Eclipseme
2.4 程序功能图及程序相关说明
2.5.1 主功能框图


启动服务器



注册界面



发送信息(用户A)



发送信息
(用户B)



发送信息
(用户C)



关闭服务器


图1 程序基本框图
表1 聊天室基本功能表
序号文件名主要功能
1ServerHost被服务器调用
2Client显示聊天室
3ClientUser被客户端调用
4LogIn注册登陆
5Objecting连接服务器
6Server启动服务器













2.5.2 程序代码说明
程序中引入的包:
package Chat;
import https://www.doczj.com/doc/7d9572739.html,.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
(1)服务器端代码中用户自定义类:
类名:Server
作用:服务器启动
继承的接口名:ActionListener
public class Server implements ActionListener{
定义的对象:
count //记录点机关闭按钮次数2次关闭
soconly //只有SOCKET,用于群发
sockets //所有客户的SOCKET
socket_thread //Socket所在的线乘,用于退出;
frame // 定义主窗体
panel //定义面板
start,stop //启动和停止按钮
主要成员方法:
public void center //定义小程序查看器的位置
public void actionPerformed //定义处理异常机制
定义子类:serverRun,Details
继承的父类名:Thread
class serverRun extends Thread //启线乘用于接收连入的Socket
class Details extends Thread //具体处理消息的线乘,只管发送消息
创建一个ServerSocket 对象,用于接受指定端口客户端的信息
ServerSocket server = new ServerSocket("1234");
接受请求时候,通过accept()方法,得到一个socket对象。
Socket socket = server.accept();
通过socket创建流(输入,输出)。
BufferedReaderbr=newBufferedReader(newInputStreamReader
(socket.getInputStream()))
DataInputStream dis = new DataInputStream(socket.getInputStream());
PrintWriter out = new PrintWriter(socket.getOutputStream());
通过流,来和客户交互。
(2)用户注册代码中相关类:
类名:LogIn
作用:用户注册登录
继承的接口名:ActionListener
public class LogIn implements ActionListener
定义的对象:
Title //定义标题
Na

me //提示输入姓名,添加注册信息
Send //提示点击“进入”,进入聊天室
构造方法:public LogIn()
(3)客户端:
① 创建一个socket对象,用于连接服务器。
② 用socket创建流。
③ 通过流和服务器进行交互。
④ 交互完毕,将流和socket关闭。
(4)聊天室:
类名:Client
作用:实现发送即时信息。
继承的接口名:ActionListener
public class Client implements ActionListener
构造方法:public Client(String name2)
异常处理:public void actionPerformed(ActionEvent e)
public void connect()
public void actionPerformed(ActionEvent e)
定义的子类:ClientSocket
继承的父类:Thread
class ClientSocket extends Thread ()
3、代码
客户端代码:
实现客户端的收发消息
聊天客户端消息收发类
*/
public class ClientReceive extends Thread {
private JComboBox combobox;
private JTextArea textarea;

Socket socket;
ObjectOutputStream output;
ObjectInputStream input;
JTextField showStatus;

public ClientReceive(Socket socket,ObjectOutputStream output,
ObjectInputStream input,JComboBox combobox,JTextArea textarea,JTextField showStatus){

this.socket = socket;
this.output = output;
this.input = input;
https://www.doczj.com/doc/7d9572739.html,bobox = combobox;
this.textarea = textarea;
this.showStatus = showStatus;
}

public void run(){
while(!socket.isClosed()){
try{
String type = (String)input.readObject();

if(type.equalsIgnoreCase("系统信息")){
String sysmsg = (String)input.readObject();
textarea.append("系统信息: "+sysmsg);
}
else if(type.equalsIgnoreCase("服务关闭")){
output.close();
input.close();
socket.close();

textarea.append("服务器已关闭!\n");
/* textarea.setFont(bold);*/
break;
}
else if(type.equalsIgnoreCase("聊天信息")){
String message = (String)input.readObject();
textarea.append(message);
}
else if(type.equalsIgnoreCase("用户列表")){
String userlist = (String)input.readObject();
String usernames[] = userlist.split("\n");
combobox.removeAllItems();

int i =0;
combobox.addItem("所有人");
while(i < usernames.length){
combobox.addItem(usernames[i]);
i ++;
}
combobox.setSelectedIndex(0);
showStatus.setText("在线用户 " + usernames.length + " 人");

}
}
catch (Exception e ){
System.out.println(e);
}
}
}
}
4、设计结果与分析
将5个Java源文件:Server.java、Objecting.java、LogIn.java、ClientUser.java、Client.java。分别编译这5个Java源文件,或运行“javac *.java”命令,编译全部的源文件,然后运行连接服务器的主类,即运行Server类。连接完毕后在运行注册的主函数类,即运行LogIn类。
首先运行启动服务器的文件Server.java,运行结果如下:
图2服务器启动成功
结果分析:在进入聊天室之前必须先启动服务器,实现服务器端的连接为用户的登录打开“窗口”。
其次运行用户注册登录文件LogIn.java,运行结果如下:
图3用户登陆界面
结果分析:添加用户信息,输入用户姓名,为用户进入聊天室提供关口。并且利用以下语句实现如图4的界面 JLabel title=new JLabel("免注册版");
JLabel name=new JLabel("输入姓名");
JButton send=new JButton("进入");
添加注册信息后点击“进入”按钮,结果如图5
图4显示用户已登录
结果分析:当服务器启动用户完成信息注册时,在服务期端的界面中会显示当前在线的人员,并且提示客户已连接到服务器,可以进行聊天行为。
图5 显示聊天内容
结果分析:多个用户进入聊天室之后,用户可以在发送信息的文本框里填写自己的内容,点击“发送信息”按钮,信息会出现在上方的区域内,在界面的右方还可以显示在线人员的姓名,另在线用户可以知道有谁在聊天室内。
聊天结束点击“离开”按钮,结果如图6所示:
图6离开聊天室
点击服务器中的“停止”按钮,结果如图7.图8所示:
图7 点击“停止”按钮
图8终止与服务器端连接
结果分析:用户聊天结束点击“离开”按钮之后会在服务器端的界面上自动显示该用户已离开,提时、示服务器执行相关行为。
综上所述:通过运行这5个文件基本实现多用户在线聊天的功能,如启动服务器:实现网络的连接,为注册进入聊天室做准备;注册登陆界面:填写基本信息如姓名等,可以供多人进入实现多人聊天功能;发送信息:为用户发送信息提供平台。
离开界面:使用户退出聊天室;关闭服务器:断开与网络的连接,彻底退出聊天室。
5、项目小结
本系统主要以文字的形式进行网路传输,与之上线的聊天室相比,本系统的功能是比较简单的,但是通过本系统的开发,基本上体现了,聊天室的流程,用到了网络传输的基本知识及软件开发的过程。这个功能也是以后可以多样化功能的基础。随着社会的进步,聊天室将具有非常大的发展空间。
6.参考文献
[1]张思民,梁维娜.Java程序设计实践教程[M

].北京:清华大学出版社;2006.8:1-21
[2] 叶核亚.JAVA2程序设计实用教程[M](第2版).北京:电子工业出版社;2008.4.
[3]陈国君、陈磊、陈锡祯、刘洋.Java2程序设计基础[M],第一版.北京:清华大学出版社,2006:324-337
[4] 朱福喜,路迟. JAVA语言与面向对象程序设计[M]. 武汉:武汉大学出版社:2007.10:130-135
[5] 唐大仕. Java程序设计[M]. 北京:北方交通大学出版社:2007.05:56-62

相关主题
文本预览
相关文档 最新文档