前言
今天带来的是利用JAVA制作一个简易无GUI的纯控制台聊天室。
实现原理:简易TCP网络编程实现客户端与服务器的交流,IO流读写数据,多线程实现多人交流。
具体用途
(××为指定用户或管理员名字)
①普通用户功能:可以聊天室群聊,一对一的私聊(使用@××>
);
②管理员功能:可以利用#××
进行踢人,*广告*
发送广告,*广告>
修改默认的广告内容
步骤
① 首先是实现登陆验证的服务器端
用的是java.net包里面的ServerSocket创建服务器端口,且设定了管理员特定密码,以及聊天室的普通用户的通用密码
需要开启多线程 一个线程应付一个客户端
package cn.Himit_ZH.ServerLogin;
import cn.Himit_ZH.ServerLogin.CloseUtils;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
/**
* 名字:登陆验证服务器
* 用途:实现验证登陆,判断是否为管理员。
* 步骤:
* 创建服务器
* 1、指定端口 使用ServerSocket创建服务器
* 2、阻塞式等待连接 accept
* 3、操作: 输入输出流操作
* 4、释放资源
* IO流实现数据的对接
*
* @author Himit_ZH
*
*/
public class ChatRoomLoginServer {
private static String RoomPwd = "666";//普通用户进入聊天室的密码
private static String AdminPWd = "admin";//管理员进入聊天室的密码
public static void main(String[] args) throws IOException {
System.out.println("-----The login Server-----");
// 1、指定端口 使用ServerSocket创建服务器
ServerSocket server =new ServerSocket(61111);
boolean isRunning =true;;
// 2、阻塞式等待连接 accept
while(isRunning) {
Socket client =server.accept();
System.out.println("-----一个客户端建立了连接-----");
new Thread(new Channel(client)).start();
}
server.close();
}
//一个channel就代表一个客户端
static class Channel implements Runnable{
private Socket client;
//输入流
private DataInputStream dis;
//输出流
private DataOutputStream dos;
private boolean IsAdmin;
public Channel(Socket client) {
this.client = client;
this.IsAdmin = false;
try {
//输入
dis = new DataInputStream(client.getInputStream());
//输出
dos =new DataOutputStream(client.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
CloseUtils.close(dos,dis);
}
}
// 判断是否为管理员
public boolean isAdmin() {
return IsAdmin;
}
//接收数据
private String receive() {
String datas ="";
try {
datas = dis.readUTF();
} catch (IOException e) {
e.printStackTrace();
}
return datas;
}
//发送数据
private void send(String msg) {
try {
dos.writeUTF(msg);
dos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
// 3、操作: 输入输出流操作
String uname ="";
String upwd ="";
//数据分析
String[] dataArray = receive().split("&");
for(String info:dataArray) {
String[] userInfo =info.split("=");
if(userInfo[0].equals("uname")) {
System.out.println("用户名为:"+userInfo[1]);
uname = userInfo[1];
}else if(userInfo[0].equals("upwd")) {
System.out.println("聊天室的密码为:"+userInfo[1]);
upwd = userInfo[1];
}
}
if (uname.contains("admin")&&upwd.equals(AdminPWd)){
send("TRUE_ADMIN");//验证为管理员
this.IsAdmin = true;
}
else {
if (upwd.equals(RoomPwd)) {
//成功
send("TRUE_USER");//验证为普通用户
} else {
//失败
send("FALSE");
}
}
CloseUtils.close(client,dos,dis);
}
}
}
②第二是识别管理员指令和转发用户内容的中转服务器
具体作用:根据指令转发私聊,群聊,实现踢人,发广告,修改广告内容,服务器实现监控连接
需要开启多线程 一个线程应付一个客户端
package cn.Himit_ZH.ServerTransponder;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.</