利用JAVA实现简单聊天室.docx

上传人:b****1 文档编号:3261764 上传时间:2023-05-05 格式:DOCX 页数:26 大小:265.55KB
下载 相关 举报
利用JAVA实现简单聊天室.docx_第1页
第1页 / 共26页
利用JAVA实现简单聊天室.docx_第2页
第2页 / 共26页
利用JAVA实现简单聊天室.docx_第3页
第3页 / 共26页
利用JAVA实现简单聊天室.docx_第4页
第4页 / 共26页
利用JAVA实现简单聊天室.docx_第5页
第5页 / 共26页
利用JAVA实现简单聊天室.docx_第6页
第6页 / 共26页
利用JAVA实现简单聊天室.docx_第7页
第7页 / 共26页
利用JAVA实现简单聊天室.docx_第8页
第8页 / 共26页
利用JAVA实现简单聊天室.docx_第9页
第9页 / 共26页
利用JAVA实现简单聊天室.docx_第10页
第10页 / 共26页
利用JAVA实现简单聊天室.docx_第11页
第11页 / 共26页
利用JAVA实现简单聊天室.docx_第12页
第12页 / 共26页
利用JAVA实现简单聊天室.docx_第13页
第13页 / 共26页
利用JAVA实现简单聊天室.docx_第14页
第14页 / 共26页
利用JAVA实现简单聊天室.docx_第15页
第15页 / 共26页
利用JAVA实现简单聊天室.docx_第16页
第16页 / 共26页
利用JAVA实现简单聊天室.docx_第17页
第17页 / 共26页
利用JAVA实现简单聊天室.docx_第18页
第18页 / 共26页
利用JAVA实现简单聊天室.docx_第19页
第19页 / 共26页
利用JAVA实现简单聊天室.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

利用JAVA实现简单聊天室.docx

《利用JAVA实现简单聊天室.docx》由会员分享,可在线阅读,更多相关《利用JAVA实现简单聊天室.docx(26页珍藏版)》请在冰点文库上搜索。

利用JAVA实现简单聊天室.docx

利用JAVA实现简单聊天室

利用JAVA实现简单聊天室

1.设计思路

Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。

而且,Java很小,整个解释器只需215K的RAM。

因此运用JAVA程序编写聊天室,实现简单聊天功能。

程序实现了聊天室的基本功能,其中有:

(1)启动服务器:

实现网络的连接,为注册进入聊天室做准备。

(2)注册登陆界面:

填写基本信息如姓名等,可以供多人进入实现多人聊天功能。

(3)发送信息:

为用户发送信息提供平台。

(4)离开界面:

使用户退出聊天室。

(5)关闭服务器:

断开与网络的连接,彻底退出聊天室。

2.设计方法

在设计简单聊天室时,需要编写5个Java源文件:

Server.java、Objecting.java、LogIn.java、ClientUser.java、Client.java。

3程序功能图及程序相关说明

(1)主功能框图

(2)聊天室基本功能表

序号

文件名

主要功能

1

ServerHost

被服务器调用

2

Client

显示聊天室

3

ClientUser

被客户端调用

4

LogIn

注册登陆

5

Objecting

连接服务器

6

Server

启动服务器

4.程序代码是说明程序中引入的包:

packageChat;import.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.util.*;

importjava.io.*;

(1)服务器端代码中用户自定义类:

类名:

Server

作用:

服务器启动

继承的接口名:

ActionListenerpublicclassServerimplementsActionListener{定义的对象:

count//记录点机关闭按钮次数2次关闭

创建一个ServerSocket对象,用于接受指定端口客户端的信息ServerSocketserver=newServerSocket("1234");接受请求时候,通过accept()方法,得到一个socket对象。

Socketsocket=server.accept();通过socket创建流(输入,输出)。

BufferedReaderbr=newBufferedReader(newInputStreamReader(socket.getInputStream()))

DataInputStreamdis=newDataInputStream(socket.getInputStream());

PrintWriterout=newPrintWriter(socket.getOutputStream());通过流,来和客户交互。

(2)用户注册代码中相关类:

类名:

LogIn

作用:

用户注册登录

继承的接口名:

ActionListenerpublicclassLogInimplementsActionListener

定义标题

提示输入姓名,添加注册信息提示点击“进入”,进入聊天室

定义的对象:

Title//

Name//

Send//

构造方法:

publicLogIn()

(3)客户端:

1创建一个socket对象,用于连接服务器

2用socket创建流。

3通过流和服务器进行交互。

4交互完毕,将流和socket关闭

(4)聊天室:

类名:

Client

作用:

实现发送即时信息继承的接口名:

ActionListener

publicclassClientimplementsActionListener

构造方法:

publicClient(Stringname2)

异常处理:

publicvoidactionPerformed(ActionEvente)

publicvoidconnect()

publicvoidactionPerformed(ActionEvente)

定义的子类:

ClientSocket

继承的父类:

Thread

classClientSocketextendsThread()5.设计结果与分析

5个Java源文件:

Server.java、Objecting.java、LogIn.java、ClientUser.java、Client.java。

分别编译这5个Java源文件,或运行“javac*.java”命令,编译全部的源文件,然后运行连接服务器的主类,即运行Server类。

连接完毕后在运行注册的主函数类,即运行LogIn类。

 

图1服务器启动成功

结果分析:

在进入聊天室之前必须先启动服务器,实现服务器端的连接为用户的登录打开“窗口”。

其次运行用户注册登录文件LogIn.java,运行结果如下:

图2用户登陆界面

结果分析:

添加用户信息,输入用户姓名,为用户进入聊天室提供关口。

并且利

用以下语句实现如图3的界面JLabeltitle=newJLabel("免注册版");

JLabelname=newJLabel("输入姓名");

JButtonsend=newJButton("进入");添加注册信息后点击“进入”按钮,结果如图3

图3显示用户已登录

结果分析:

当服务器启动用户完成信息注册时,在服务期端的界面中会显示当前在线的人员,并且提示客户已连接到服务器,可以进行聊天行为。

图4显示聊天内容

结果分析:

多个用户进入聊天室之后,用户可以在发送信息的文本框里填写自己的内容,点击“发送信息”按钮,信息会出现在上方的区域内,在界面的右方还可以显示在线人员的姓名,另在线用户可以知道有谁在聊天室内。

聊天结束点击“离开”按钮,结果如图5所示:

图5离开聊天室

点击服务器中的“停止”按钮,结果如图6.图7.所示:

图6点击“停止”按钮

 

图7终止与服务器端连接结果分析:

用户聊天结束点击“离开”按钮之后会在服务器端的界面上自动显示该用户已离开,提时、示服务器执行相关行为。

离开界面:

使用户退出聊天室;关闭服务器:

断开与网络的连接,彻底退出聊天室。

6.语句实现

(1)Server.java

packageChat;

import.*;

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

importjava.util.*;

importjava.io.*;

publicclassServerimplementsActionListener{

intcount=0;

Vectorsoconly=newVector();

HashMapsockets=newHashMap();

HashMapsocket_thread=newHashMap();

ServerSocketserversocket;

JFrameframe;

JTextAreaarea=newJTextArea();

JPanelpanel=newJPanel();

JButtonstart=newJButton("启动");

JButtonstop=newJButton("停止");

publicServer(){

panel.add(start);

panel.add(stop);

frame.add(panel,BorderLayout.NORTH);frame.add(area,BorderLayout.CENTER);

frame.pack();

center();

frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);frame.setVisible(true);

start.addActionListener(this);

stop.addActionListener(this);

System.out.println("new");

}

publicvoidcenter(){

Toolkittoolkit=Toolkit.getDefaultToolkit();

Dimensione=toolkit.getScreenSize();

intx=e.width/2-(int)(frame.getSize().getWidth()/2);

inty=e.height/2-(int)(frame.getSize().getHeight()/2);

frame.setLocation(x,y);

}

publicvoidactionPerformed(ActionEvente){

JButtonbtn=(JButton)e.getSource();

if(btn==start){serverRunserverrun=newserverRun();System.out.println("gogo");serverrun.start();

}

if(btn==stop){

try{

Iteratori=soconly.iterator();

while(i.hasNext()){

Sockets=(Socket)i.next();

ObjectOutputStreamout=newObjectOutputStream(s.getOutputStream());

Objectingbj=newObjecting();

out.writeObject("系统消息服务器马上关闭!

请马上关

闭客户端");

}

count++;if(count==2){System.exit(0);

}

JOptionPane.showMessageDialog(frame,"已通知客户端,请再次点击关闭按钮关闭");

}catch(Exceptionex){ex.printStackTrace();}

}

}

classserverRunextendsThread{

publicvoidrun(){try{

System.out.println("开始SERVERRUN");serversocket=newServerSocket(55555);area.append("服务器启动\n");

start.setEnabled(false);while(true){

Socketsocket=serversocket.accept();

System.out.println("连接成功");

BufferedReaderbr=newBufferedReader(newInputStreamReader(socket.getInputStream()));

Stringname=br.readLine();

area.append("服务器接收用户"+name+"的连接\n");soconly.add(socket);

Iteratori=soconly.iterator();

while(i.hasNext()){

Sockets=(Socket)i.next();//获得其他SOCKET的通信口ObjectOutputStreamout=new

Detailsd=newDetails(socket);

socket_thread.put(name,d);

d.start();

}

}catch(Exceptione){e.printStackTrace();}

}}

classDetailsextendsThread{

booleanalive=true;

ObjectInputStreamin;

ObjectOutputStreamout;

Socketsocket;

Details(Socketsocket){

this.socket=socket;

publicvoidrun(){

while(alive){

try{

in=newObjectInputStream(socket.getInputStream());

Objectingobjecting=(Objecting)in.readObject();

Stringname=objecting.getKey();

Stringcontent=objecting.getValue();

if(name.equalsIgnoreCase("all")){

Iteratori=soconly.iterator();

while(i.hasNext()){

Sockets=(Socket)i.next();

out=newObjectOutputStream(s.getOutputStream());

out.writeObject(content);

System.out.println("Send");

}}

if(name.equalsIgnoreCase("exit")){

Detailsthread=(Details)socket_thread.get(content);

thread.alive=false;

area.append(content+"socket.close();soconly.remove(socket);sockets.remove(content);Iteratori=soconly.iterator();while(i.hasNext()){

离开\n");

Sockets=(Socket)i.next();

out=newObjectOutputStream(s.getOutputStream());out.writeObject("

系统消息"+content+"

用户离开

"+"");}

Vectorv=getList();

Iteratorj=soconly.iterator();

while(j.hasNext()){

Sockets=(Socket)j.next();

ObjectOutputStream

ObjectOutputStream(s.getOutputStream());

out.writeObject(v);

System.out.println("

}

}

out

new

服务器发送用户列表离开

");

 

if(!

name.equalsIgnoreCase("all")&!

name.equalsIgnoreCase("exit")){

area.append("处理私聊信息");Sockets=(Socket)sockets.get(name);

out=newObjectOutputStream(s.getOutputStream());out.writeObject(content);

}catch(Exceptione){e.printStackTrace();}

}}}

publicVectorgetList(){

Vectorv=newVector();

Setset=sockets.keySet();

Iteratori=set.iterator();

while(i.hasNext()){

v.add(i.next());

}

returnv;

}

publicstaticvoidmain(Stringargs[]){

newServer();}}

(2)Objecting.java

packageChat;

importjava.io.Serializable;

publicclassObjectingimplementsSerializable{

Stringkey;

Stringvalue;

publicObjecting(){}

publicObjecting(Stringkey,Stringvalue){

this.key=key;

this.value=value;}

publicvoidsetKey(Stringkey){

this.key=key;}

publicvoidsetValue(Stringvalue){

this.value=value;}

publicStringgetKey(){

returnkey;}

publicStringgetValue(){

returnvalue;}}

(3)LogIn.javapackageChat;

importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;

publicclassLogInimplementsActionListener{

JFrameframe;

JLabeltitle=newJLabel("免注册版");

JPanelbanner=newJPanel();

JTextFieldtext=newJTextField(10);

JPanelbody=newJPanel();

JPanelbuttom=newJPanel();

JLabelname=newJLabel("输入姓名");

JButtonsend=newJButton("进入");

publicLogIn(){

frame=newJFrame("注册");frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);banner.add(title);

body.add(name);

body.add(text);

buttom.add(send);

frame.add(banner,BorderLayout.NORTH);frame.add(body,BorderLayout.CENTER);frame.add(buttom,BorderLayout.SOUTH);frame.pack();

center();

frame.setVisible(true);

send.addActionListener(this);}

publicvoidcenter(){

Toolkittoolkit=Toolkit.getDefaultToolkit();

Dimensione=toolkit.getScreenSize();

intx=e.width/2-(int)(frame.getSize().getWidth()/2);

inty=e.height/2-(int)(frame.getSize().getHeight()/2);frame.setLocation(x,y);}

publicvoidactionPerformed(ActionEvente){if(text.getText().equals("")){JOptionPane.showMessageDialog(frame,"姓名不能为空");

return;}else{newClient(text.getText());frame.dispose();}}publicstaticvoidmain(Stringargs[]){newLogIn();}}

(4)ClientUser.java

packageChat;

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

import.*;

importjava.io.*;

publicclassClientUserextendsWindowAdapterimplementsActionListener,Runnable{publicJFramejf;

publicJTextFieldjt;

publicJTextFieldname;

publicJButtonconnect;

publicJScrollPanejsp;

publicJTextAreajta;

publicJButtonjb;publicJLabell;Socketsoc;InputStreamsoc_in;OutputStreamsoc_out;BufferedReaderBsoc_in;PrintWriterPsoc_out;

publicClientUser(){jf=newJFrame("ClientChatRoom");jta=newJTextArea(10,30);jta.setEditable(false);jsp=new

JScrollPane(jta,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

jt=newJTextField(30);name=newJTextField(5);

l=newJLabel("Pleaseinputyourname");

connect=newJButton("Connect");connect.addActionListener(this);jt.addActionListener(this);jb=newJButton("SendTheMessage");jb.addActionListener(this);JPaneljp=newJPanel();

JPaneljp2=newJPanel();jp.setLayout(newFlowLayout());jp.add(jt);

jp.add(jb);

jp2.add(l);jp2.add(name);jp2.add(connect);

Containerc=jf.getContentPane();c.setLayout(newGridBagLayout());GridBagConstraintsgbc=newGridBagConstraints();gbc.gridx=0;

gbc.gridy=0;c.add(jp2,gbc);

gbc.g

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

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2