完整word版JAVA聊天室.docx

上传人:b****5 文档编号:10186662 上传时间:2023-02-09 格式:DOCX 页数:56 大小:226.30KB
下载 相关 举报
完整word版JAVA聊天室.docx_第1页
第1页 / 共56页
完整word版JAVA聊天室.docx_第2页
第2页 / 共56页
完整word版JAVA聊天室.docx_第3页
第3页 / 共56页
完整word版JAVA聊天室.docx_第4页
第4页 / 共56页
完整word版JAVA聊天室.docx_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

完整word版JAVA聊天室.docx

《完整word版JAVA聊天室.docx》由会员分享,可在线阅读,更多相关《完整word版JAVA聊天室.docx(56页珍藏版)》请在冰豆网上搜索。

完整word版JAVA聊天室.docx

完整word版JAVA聊天室

基于JAVA的聊天室设计与实现

一、设计目的:

信息技术的高速发展给人类生产,生活带来了广泛而深远的影响。

“上网冲浪”、“数码相机”“PDA”、“彩屏手机”、“蓝牙技术”等新产品,新概念层出不穷,不断冲击着人们的视听。

这些高科技成果为人们带来便捷、快乐的同时,也促进了人机交互技术的发展。

人机交互是关于设计、评价和实现供人们使用的交互式计算机系统,并围绕相关的主要现象进行研究的科学。

它主要研究人与计算机之间的信息交换,涉及计算机科学,心理学,认知科学等诸多学科,是信息技术的一个重要组成部分,并将继续对信息技术的发展产生巨大影响。

聊天室是一项应用广泛,并且实用性强的一个非常典型的人机交互系统。

在信息世界里,聊天工具的使用是非常频繁的,如MSN、QQ、校内通,之类的聊天工具许多人都正在使用。

此次设计的聊天室系统虽然其功能简单,但是在开发技术和过程中,能够充分学习和使用JAVA的技术,进一步培养学生面向对象程序设计的思想,加深对面向对象程序设计四大特性的理解。

二、需求分析

人们日常生活中越来越多地使用聊天室这项应用来为自己的工作和学习服务。

一个操作简单,界面友好、运行稳定的聊天室对于小型局域网的用户可以起到很好的交流作用。

所谓聊天室就是一个可以让许多用户同时互相通信的网上园地,个人用户可以通过聊天室将自己融入整个主流社会中。

根据目前使用聊天室的用户需求显示,用户对于聊天室主要有以下几点要求:

(1)、聊天功能:

可以实时接收和发送信息,并能支持公聊和私聊的的方式,能够查看聊天记录,聊天过程中能对字体、表情等进行设定等。

(2)、用户功能:

可以随时注册和登录及注销,并能选择性加好友和删除好友以及查看对方的开放信息,还能看到对方的登录状态。

(3)、文件传输功能:

用户可以共享资源,能发送及接收文件。

(4)、保密功能:

用户可以设定自己的保密状态,使某些信息对于其他用户是不可见的。

(5)、系统稳定:

客户端与服务端的连接稳定,不出现或者少出现连接不上的情况。

该简易聊天室是为许多喜爱聊天的用户开发设计的,和许多大型的网络聊天室相比该小聊天室功能比较简单,但能实现基本的聊天功能,点对多、点对点聊天和基本的用户功能,登录、注销、查看在线用户等。

三、软件功能描述

(1)、用户设置:

功能描述:

用户自定义自己的登录名,成功设置后,服务端能接收到新设置的用户名;

(2)、登录功能:

功能描述:

在服务端开启的情况下,用户可以以自己自定义或者默认的登录名和登录地址端口登录到客户端,并能在服务器端显示登录状态;

(3)、公聊:

功能描述:

用户在聊天室中可以选择与“所有人”聊天,聊天室中的其他在线用户可以正常接收并正确显示公聊消息。

(4)、私聊:

功能描述:

用户可以选择与聊天室的在线用户列表中的其他用户聊天。

双方的聊天记录对于聊天室的其他用户是不可见的。

(5)、聊天心情:

功能描述:

用户在聊天的过程中可以选择相应的心情来表达自己的情感。

(6)、系统消息:

功能描述:

服务端正常运行的过程中,在聊天室的每一个用户都能接收服务器端发送的信息提示信息。

(7)、用户的状态.

功能描述:

每一个客户端用户都可以实时看到目前其他在线用户的状态。

(8)、用户注销:

功能描述:

用户可以注销自己的账号,并重新登记登录名和地址。

(9)、用户退出:

功能描述:

用户可以在正常情况下退出聊天室。

(10)、服务端控制:

功能描述:

只有在服务端开启的情况下,用户才能登陆成功和聊天;用户设置的地址端口也必须与服务端的侦听端口一致,否则不能登录。

四:

主要模块描述及流程图

1、模块描述

本聊天室分为聊天室服务端和聊天室客户端,服务端与客户端之间通过套接口Socket(TCP)连接。

在java中使用套接口相当简单,JavaAPI为处理套接口的通信提供了一个类.Socket.,使得编写网络应用程序相对容易.服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认IP地址为:

127.0.0.1默认端口为8888。

(1)聊天室服务端模块图:

 

端口服务:

输入要侦听的端口,默认为8888;

启动服务:

启动服务器,并开始在设置的端口中侦听,客户端用户可以登录并开始聊天;

停止服务:

关闭服务器,侦听结束。

客户端用户不能再聊天;

发送系统消息:

服务器端给所有人或者个别用户发送消息。

消息显示:

可以显示所有用户的聊天记录,和上线、下线信息。

退出服务器:

退出程序,并停止服务;

(2)聊天室客户端模块图:

 

用户设置:

用户可以设置自己的用户名进行聊天;

连接设置:

用户可以设置自己的服务器的IP地址和端口号,默认的连接地址为:

127.0.0.1:

8888;

用户登录:

只能在聊天室服务端已开启的情况下,用户才能登录,用户登录之后才能开始聊天,登录后不能再修改用户设置和连接设置;

用户注销:

退出聊天,可以继续修改用户设置和连接设置;

发送和接收聊天信息:

用户可以给所有人或者个别用户发送信息,并能看到其他用户发送给自己或所有人的消息;

退出:

关闭所有聊天并退出客户端。

 

2、流程图

设置侦听端口

默认端口:

8888

设置用户名

默认连接地址或用户名

设置IP地址和端口

 

五.主要类UML关系图:

聊天室服务器端设计:

 

1、聊天室服务器端设计:

聊天室服务端主要包括7个文件,它们的功能如下:

(1)ChatServer.java:

包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加事件侦听与事件处理。

调用ServerListen类来实现服务端用户上线与下线的侦听,调用ServerReceive类来实现服务器端的消息的收发。

(2)ServerListen.java:

该类实现服务端用户上线与下线的侦听。

该类对用户上线下线的侦听是通过调用用户链表类(UserLinkList)来实现的,当用户上线与下线情况发生变化时,该类会对主类的界面进行相应的修改。

(3)ServerReceive.java:

该类是实现服务器端的消息的收发的类。

该类分别定义了向某用户及所有人发送消息的方法,发送的消息会显示在主界面类的界面上。

(4)PortConf.java:

该类继承自JDialog,是用户对服务器端侦听端口进行修改配置的类。

(5)Node.java:

用户链表的节点类,定义了链表中的用户。

该类与前面所讲的链表节点Node类的功能相当。

(6)UserLinkList.java:

用户链表节点的具体实现类。

该类通过构造函数构造用户链表,定义了添加用户,删除用户、返回用户数、根据用户名查找用户、根据索引查找用户这5个方法。

(7)Help.java:

服务端程序的帮助类。

聊天室客户端设计:

 

聊天室客户端主要包括5个文件,它们的功能如下:

(1)ChatClient.java:

包含名为ChatClient的public类,其主要功能为定义客户端的界面,添加事件侦听与事件处理。

该类定义了Connect()与DisConnect()方法实现与服务器的连接与断开连接。

当登录到指定的服务器时,调用ClientReceive类实现消息收发,同时该类还定义了SendMessage()方法来向其他用户发送带有表情的消息或者悄悄话。

(2)ClientReceive.java:

该类是实现服务器端与客户端消息收发的类。

(3)ConnectConf.java:

该类继承自JDialog,是用户对所要连接的服务器IP及侦听端口进行修改配置的类。

(4)UserConf.java:

该类继承自JDialog,是用户对连接到服务器所显示的用户名进行修改配置的类。

(5)Help.java:

客户端程序的帮助类。

六.主要程序代码清单和注释说明:

******************ChatServer.java****************************************

publicvoidactionPerformed(ActionEvente){

Objectobj=e.getSource();

if(obj==startServer||obj==startItem){//启动服务端

startService();

}

elseif(obj==stopServer||obj==stopItem){//停止服务端

intj=JOptionPane.showConfirmDialog(

this,"真的停止服务吗?

","停止服务",

JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);

if(j==JOptionPane.YES_OPTION){

stopService();

}

}

elseif(obj==portSet||obj==portItem){//端口设置

//调出端口设置的对话框

PortConfportConf=newPortConf(this);

portConf.show();

}

elseif(obj==exitButton||obj==exitItem){//退出程序

intj=JOptionPane.showConfirmDialog(

this,"真的要退出吗?

","退出",

JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);

if(j==JOptionPane.YES_OPTION){

stopService();

System.exit(0);

}

}

elseif(obj==helpItem){//菜单栏中的帮助

//调出帮助对话框

HelphelpDialog=newHelp(this);

helpDialog.show();

}

elseif(obj==sysMessage||obj==sysMessageButton){//发送系统消息

sendSystemMessage();

}

}

/**

*启动服务端

*/

publicvoidstartService(){

try{

serverSocket=newServerSocket(port,10);

messageShow.append("服务端已经启动,在"+port+"端口侦听...\n");

startServer.setEnabled(false);

startItem.setEnabled(false);

portSet.setEnabled(false);

portItem.setEnabled(false);

stopServer.setEnabled(true);

stopItem.setEnabled(true);

sysMessage.setEnabled(true);

}

catch(Exceptione){

//System.out.println(e);

}

userLinkList=newUserLinkList();

listenThread=newServerListen(serverSocket,combobox,

messageShow,showStatus,userLinkList);

listenThread.start();

}

/**

*关闭服务端

*/

publicvoidstopService(){

try{

//向所有人发送服务器关闭的消息

sendStopToAll();

listenThread.isStop=true;

serverSocket.close();

intcount=userLinkList.getCount();

inti=0;

while(i

Nodenode=userLinkList.findUser(i);

node.input.close();

node.output.close();

node.socket.close();

i++;

}

stopServer.setEnabled(false);

stopItem.setEnabled(false);

startServer.setEnabled(true);

startItem.setEnabled(true);

portSet.setEnabled(true);

portItem.setEnabled(true);

sysMessage.setEnabled(false);

messageShow.append("服务端已经关闭\n");

combobox.removeAllItems();

combobox.addItem("所有人");

}

catch(Exceptione){

//System.out.println(e);

}

}

/**

*向所有人发送服务器关闭的消息

*/

publicvoidsendStopToAll(){

intcount=userLinkList.getCount();

inti=0;

while(i

Nodenode=userLinkList.findUser(i);

if(node==null){

i++;

continue;

}

try{

node.output.writeObject("服务关闭");

node.output.flush();

}

catch(Exceptione){

//System.out.println("$$$"+e);

}

i++;

}

}

/**

*向所有人发送消息

*/

publicvoidsendMsgToAll(Stringmsg){

intcount=userLinkList.getCount();//用户总数

inti=0;

while(i

Nodenode=userLinkList.findUser(i);

if(node==null){

i++;

continue;

}

try{

node.output.writeObject("系统信息");

node.output.flush();

node.output.writeObject(msg);

node.output.flush();

}

catch(Exceptione){

//System.out.println("@@@"+e);

}

i++;

}

sysMessage.setText("");

}

/**

*向客户端用户发送消息

*/

publicvoidsendSystemMessage(){

StringtoSomebody=combobox.getSelectedItem().toString();

Stringmessage=sysMessage.getText()+"\n";

messageShow.append(message);

//向所有人发送消息

if(toSomebody.equalsIgnoreCase("所有人")){

sendMsgToAll(message);

}

else{

//向某个用户发送消息

Nodenode=userLinkList.findUser(toSomebody);

try{

node.output.writeObject("系统信息");

node.output.flush();

node.output.writeObject(message);

node.output.flush();

}

catch(Exceptione){

//System.out.println("!

!

!

"+e);

}

sysMessage.setText("");//将发送消息栏的消息清空

}

}

publicstaticvoidmain(String[]args){

ChatServerapp=newChatServer();

}

}

************************ServerListen.java:

***************************

publicclassServerListenextendsThread{

ServerSocketserver;

JComboBoxcombobox;

JTextAreatextarea;

JTextFieldtextfield;

UserLinkListuserLinkList;//用户链表

Nodeclient;

ServerReceiverecvThread;

publicbooleanisStop;

/*

*聊天服务端的用户上线于下线侦听类

*/

publicServerListen(ServerSocketserver,JComboBoxcombobox,

JTextAreatextarea,JTextFieldtextfield,UserLinkListuserLinkList){

this.server=server;

bobox=combobox;

this.textarea=textarea;

this.textfield=textfield;

this.userLinkList=userLinkList;

isStop=false;

}

publicvoidrun(){

while(!

isStop&&!

server.isClosed()){

try{

client=newNode();

client.socket=server.accept();

client.output=newObjectOutputStream(client.socket.getOutputStream());

client.output.flush();

client.input=newObjectInputStream(client.socket.getInputStream());

client.username=(String)client.input.readObject();

//显示提示信息

combobox.addItem(client.username);

userLinkList.addUser(client);

textarea.append("用户"+client.username+"上线"+"\n");

textfield.setText("在线用户"+userLinkList.getCount()+"人\n");

recvThread=newServerReceive(textarea,textfield,

combobox,client,userLinkList);

recvThread.start();

}

catch(Exceptione){

}

}

}

}

********************************ServerReceive.java***********************

/*

*服务器收发消息的类

*/

publicclassServerReceiveextendsThread{

JTextAreatextarea;

JTextFieldtextfield;

JComboBoxcombobox;

Nodeclient;

UserLinkListuserLinkList;//用户链表

publicbooleanisStop;

publicServerReceive(JTextAreatextarea,JTextFieldtextfield,

JComboBoxcombobox,Nodeclient,UserLinkListuserLinkList){

this.textarea=textarea;

this.textfield=textfield;

this.client=client;

this.userLinkList=userLinkList;

bobox=combobox;

isStop=false;

}

publicvoidrun(){

//向所有人发送用户的列表

sendUserList();

while(!

isStop&&!

client.socket.isClosed()){

try{

Stringtype=(String)client.input.readObject();

if(type.equalsIgnoreCase("聊天信息")){

StringtoSomebody=(String)client.input.readObject();

Stringstatus=(String)client.input.readObject();

Stringaction=(String)client.input.readObject();

Stringmessage=(String)client.input.readObject();

Stringmsg=client.username

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1