JAVA实现无界面控制台版聊天室

本文介绍如何使用JAVA构建一个无GUI的控制台聊天室,通过TCP网络编程和多线程技术实现客户端与服务器的交流。功能包括用户登录验证、管理员权限(如踢人、修改广告)、普通用户群聊和私聊。详细步骤涵盖服务器端、中转服务器、客户端的实现,以及通用工具类的使用。
摘要由CSDN通过智能技术生成

前言

今天带来的是利用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.</
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值