JAVA小型聊天室.docx

上传人:b****3 文档编号:13025076 上传时间:2023-04-22 格式:DOCX 页数:37 大小:23.80KB
下载 相关 举报
JAVA小型聊天室.docx_第1页
第1页 / 共37页
JAVA小型聊天室.docx_第2页
第2页 / 共37页
JAVA小型聊天室.docx_第3页
第3页 / 共37页
JAVA小型聊天室.docx_第4页
第4页 / 共37页
JAVA小型聊天室.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

JAVA小型聊天室.docx

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

JAVA小型聊天室.docx

JAVA小型聊天室

JAVA小型聊天室

下载必读:

1、要在工程里新建config.properties以及login.properties的配置文件serverhost和serverport分别为服务器所在计算机的IP和端口:

config.properties:

serverhost=loaclhost

serverport=8088

login.properties:

serverhost=loaclhost

serverport=8089

2、先启动聊天室消息服务器ChatServer和登录服务器LoginServer

3、然后启动登录客户端Login

4、先注册,注册后要重启登录服务器,然后再登录才不会出错(小bug不想修改了,可自行修改)

5、聊天室目前实行了登录界面和聊天界面,可自行开发注册界面等

6、聊天室目前只实现了公聊、私聊、好友列表刷新、上下线提醒等功能。

可自行添加其他功能

7、用户信息目前只开发了昵称和密码两个属性,可自行开发其他属性

源代码:

1、聊天室消息服务器ChatServer:

importjava.io.BufferedReader;

importjava.io.InputStreamReader;

importjava.io.OutputStreamWriter;

importjava.io.PrintWriter;

import.InetAddress;

import.ServerSocket;

import.Socket;

importjava.util.HashMap;

importjava.util.Map;

importjava.util.Set;

importjava.util.concurrent.ExecutorService;

importjava.util.concurrent.Executors;

/**

*聊天室消息接收发送服务器

*@authorAmong

*

*/

publicclassChatServer{

privateServerSocketserver;

privateMapPW;//存储每个线程的输出流

privateMapuser;//存储每个用户信息

privateExecutorServicethreadPool;//线程池

privatestaticfinalStringpersonalChat="11110001";//私聊标识

privatestaticfinalStringpublicChat="11110010";//公聊标识

privatestaticfinalStringOnline="11110011";//上线标识

privatestaticfinalStringSigningOff="11110100";//下线标识

privatestaticfinalStringfriendSign="11110101";//好友列表请求标识

/**

*构造方法

*初始化

*/

publicChatServer(){

try{

server=newServerSocket(8088);//打开新的服务端接口

PW=newHashMap();

user=newHashMap();

threadPool=Executors.newFixedThreadPool(50);

}catch(Exceptione){

e.printStackTrace();

}

}

/**

*添加输出流方法,并添加同步互斥锁

*@paramname

*@parampw

*/

privatesynchronizedvoidaddPw(Stringname,PrintWriterpw){

PW.put(name,pw);

}

/**

*删除输出流方法,添加同步互斥锁

*@paramname

*@parampw

*/

privatesynchronizedvoidremovePw(Stringname,PrintWriterpw){

PW.remove(name,pw);

}

/**

*遍历输出流,群发消息

*添加同步互斥锁

*@parammsg

*/

privatesynchronizedvoidsendMsgtoAll(Stringmsg){

Setnames=PW.keySet();

for(Stringname:

names){

PW.get(name).println(msg);

}

}

/**

*服务器启动方法

*打开接收器,并把连接进来的socket交给线程开始聊天

*/

publicvoidstart(){

try{

while(true){

System.out.println("等到客户端连接...");

Socketsocket=server.accept();

System.out.println("一个客户端连接了!

");

//启动一个线程来处理新连接

ClientHandlerhandler=newClientHandler(socket);

threadPool.execute(handler);

}

}catch(Exceptione){

}

}

/**

*线程

*用于和每个连接进来的socket交互

*/

classClientHandlerimplementsRunnable{

privateSocketsocket;

privateStringhost;

privateintport;

privatePrintWriterpw=null;

privateStringname;

privateBufferedReaderbr;

privateStringName;

/**

*构造方法

*获取连接进来的socket信息

*@paramsocket

*/

publicClientHandler(Socketsocket){

InetAddressaddress=socket.getInetAddress();

host=address.getHostAddress();

port=socket.getPort();

System.out.println(host+port+"上线了。

当前在线人数:

"+(PW.size()+1));

this.socket=socket;

}

/**

*线程run方法

*获取socket输入输出流

*1、读取用户名称

*2、判断消息标识符

*3、接收并处理消息

*4、发送消息标识符

*5、发送消息

*/

publicvoidrun(){

try{

pw=newPrintWriter(newOutputStreamWriter(socket.getOutputStream()),true);

br=newBufferedReader(

newInputStreamReader(socket.getInputStream()));

name=br.readLine();

user.put(name,name);

addPw(name,pw);

Stringmessage=null;

//sendMsgtoAll(name+"上线了。

当前在线人数:

"+PW.size());

while((message=br.readLine())!

=null){

if(Online.equals(message)){

sendMsgtoAll(Online);

sendMsgtoAll(name);

}elseif(publicChat.equals(message)){

message=br.readLine();

sendMsgtoAll(publicChat);

sendMsgtoAll(name+"说:

"+message);

System.out.println(name+message);

}elseif(SigningOff.equals(message)){

//message=br.readLine();

//System.out.println(name+message);

sendMsgtoAll(SigningOff);

sendMsgtoAll(name+"下线了。

当前在线人数:

"+(PW.size()-1));

System.out.println(name+"下线了。

当前在线人数:

"+(PW.size()-1));

user.remove(name);//删除下线用户

removePw(name,pw);//删除下线用户的输出流

socket.close();

}elseif(personalChat.equals(message)){

message=br.readLine();

String[]msg=message.split(":

");

PW.get(msg[0]).println(personalChat);

PW.get(msg[0]).println(name+"悄悄对你说:

"+msg[1]);

PW.get(name).println(personalChat);

PW.get(name).println("你悄悄对"+msg[0]+"说:

"+msg[1]);

}elseif(friendSign.equals(message)){

Stringmsgs="";

Setnames=user.keySet();

for(Stringn:

names){

Name=user.get(n);

msgs+=Name+":

";

}

System.out.println(msgs);

sendMsgtoAll(friendSign);

sendMsgtoAll(msgs);

}

}

}catch(Exceptione){

//e.printStackTrace();

}

}

}

/**main方法*/

publicstaticvoidmain(String[]args){

ChatServerserver=newChatServer();

server.start();

}

}

2、聊天室登录服务器LoginServer:

importjava.io.BufferedReader;

importjava.io.InputStreamReader;

importjava.io.OutputStreamWriter;

importjava.io.PrintWriter;

import.ServerSocket;

import.Socket;

importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.Iterator;

importjava.util.List;

importjava.util.Map;

importjava.util.concurrent.ExecutorService;

importjava.util.concurrent.Executors;

/**

*聊天室登录服务器

*接收和发送登录注册信息

*@authorAmong

*@version1.0

*/

publicclassLoginServer{

privatestaticfinalStringcheckLogin="11110110";//检查登录信息标识

privatestaticfinalStringCorrect="11111111";//信息正确标识

privatestaticfinalStringWrong="00000000";//信息错误标识

privatestaticfinalStringRegist="11110111";//注册标识

privateServerSocketserver;

privateExecutorServicethreadPool;

privateListuser=newArrayList();

privateMaplogin;

privateSavesave=newSave();

privateIteratorit;

privateUseruser0=null;

/**

*构造方法

*打开监听接口

*初始化

*/

publicLoginServer(){

try{

server=newServerSocket(8089);

threadPool=Executors.newFixedThreadPool(50);

user=save.ReadData();

it=user.iterator();

login=newHashMap();

while(it.hasNext()){

user0=it.next();

if(user0==null){

continue;

}

login.put(user0.getName(),user0.getPassword());

}

}catch(Exceptione){

e.printStackTrace();

}

}

/**

*登录服务器启动方法

*接收socket连接

*建立线程处理信息

*/

publicvoidstart(){

try{

while(true){

System.out.println("等待一个登陆客户端...");

Socketsocket=server.accept();

System.out.println("登陆客户端已连接!

");

threadPool.execute(newLoginHandler(socket));

}

}catch(Exceptione){

e.printStackTrace();

}

}

/**

*交互信息处理线程

*1、获取输入输出流

*2、判断消息标识

*3、接收消息

*4、处理消息

*5、发送消息标识

*6、发送处理结果

*/

classLoginHandlerimplementsRunnable{

privateSocketsocket;

publicBufferedReaderbr;

publicPrintWriterpw;

publicString[]logins;

publicUserusers;

publicLoginHandler(Socketsocket){

this.socket=socket;

}

@Override

/**

*线程run方法

*/

publicvoidrun(){

try{

br=newBufferedReader(newInputStreamReader(socket.getInputStream(),"utf-8"));

pw=newPrintWriter(newOutputStreamWriter(socket.getOutputStream(),"utf-8"),true);

Stringmessage=null;

while((message=br.readLine())!

=null){

System.out.println(message);

if(checkLogin.equals(message)){

message=br.readLine();

System.out.println(message);

logins=message.split(":

");

System.out.println(logins[0]+","+logins[1]);

System.out.println(user.toString());

System.out.println();

if(logins[1].equals(login.get(logins[0]))){

pw.println(Correct);

}else{

pw.println(Wrong);

}

}elseif(Regist.equals(message)){

message=br.readLine();

System.out.println(message);

logins=message.split(":

");

System.out.println(logins[0]+","+logins[1]);

System.out.println(user.toString());

if(login.containsKey(logins[0])){

pw.println(Wrong);

}else{

pw.println(Correct);

user.add(newUser(logins[0],logins[1]));

save.SaveData(user);

}

}

}

}catch(Exceptione){

//TODO:

handleexception

}

}

}

/**

*main方法

*@paramargs

*/

publicstaticvoidmain(String[]args){

LoginServerserver=newLoginServer();

server.start();

}

}

 

3、聊天室登录界面Login:

importjava.awt.GridLayout;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.io.BufferedReader;

importjava.io.FileInputStream;

importjava.io.InputStreamReader;

importjava.io.OutputStreamWriter;

importjava.io.PrintWriter;

import.Socket;

importjava.util.Properties;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JOptionPane;

importjavax.swing.JPanel;

importjavax.swing.JTextField;

importjavax.swing.border.TitledBorder;

/**

*聊天室登录界面

*客户端启动处

*@authorAmong

*@version1.0

*/

publicclassLoginimplementsActionListener{

privatestaticfinalStringcheckLogin="11110110";//检查登录信息标识

privatestaticfinalStringCorrect="11111111";//信息正确标识

privatestaticfinalStringRegist="11110111";//注册标识

privatestaticSocketsocket;

privatestaticPrintWriterpw;

privatestaticBufferedReaderbr;

privateJFrameframe=newJFrame("登录");

privateJPaneljp1=newJPanel();

privateJPaneljp2=newJPanel();

privateJPaneljp3=newJPanel();

privateJPaneljp4=newJPanel();

privateJLabeljl1=newJLabel("账号:

");

privateJLabeljl2=newJLabel("密码:

");

privateJTextFieldjtf1=newJTextField(15);

privateJTextFieldjtf2=newJTextField(15);

privateJButtonjb1=newJButton("登录");

privateJButto

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

当前位置:首页 > 初中教育 > 科学

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

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