手撸一个java简易聊天室

创建一个Java聊天室涉及到网络编程、多线程处理以及用户界面设计。这里我将提供一个简单的Java聊天室实现,包括服务器端和客户端的基本逻辑。

服务器端

服务器端负责接收客户端的消息,并将其广播给所有连接的客户端。

java

复制

import java.io.;
import java.net.
;

import java.util.*;

public class ChatServer {

private static final int PORT = 6789;

private static List clients = Collections.synchronizedList(new ArrayList<>());

复制代码
public static void main(String[] args) throws IOException {
    ServerSocket serverSocket = new ServerSocket(PORT);
    System.out.println("Chat server started on port " + PORT);

    while (true) {
        try (Socket clientSocket = serverSocket.accept()) {
            System.out.println("New client connected: " + clientSocket.getRemoteSocketAddress());
            ClientHandler clientHandler = new ClientHandler(clientSocket);
            clients.add(clientHandler);
            clientHandler.start();
        }
    }
}

public static void broadcastMessage(String message) {
    for (ClientHandler client : clients) {
        client.sendMessage(message);
    }
}

private static class ClientHandler extends Thread {
    private Socket clientSocket;
    private PrintWriter out;

    public ClientHandler(Socket socket) {
        this.clientSocket = socket;
    }

    @Override
    public void run() {
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            out = new PrintWriter(clientSocket.getOutputStream(), true);

            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                broadcastMessage(inputLine);
            }
        } catch (IOException e) {
            System.out.println("Error in client handler: " + e.getMessage());
        } finally {
            try {
                clientSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            clients.remove(this);
        }
    }

    public void sendMessage(String message) {
        out.println(message);
    }
}

}

客户端

客户端负责连接服务器,发送消息,并接收服务器广播的消息。

java

复制

import java.io.;
import java.net.
;

import java.util.Scanner;

public class ChatClient {

private static final String HOST = "localhost";

private static final int PORT = 6789;

复制代码
public static void main(String[] args) throws IOException {
    try (Socket socket = new Socket(HOST, PORT);
         PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
         BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
         Scanner scanner = new Scanner(System.in)) {

        System.out.println("Connected to the chat server");

        // Receive messages from the server
        new Thread(() -> {
            try {
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    System.out.println(inputLine);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();

        // Send messages to the server
        while (scanner.hasNextLine()) {
            String userMessage = scanner.nextLine();
            out.println(userMessage);
        }
    }
}

}

运行说明

首先运行 ChatServer 类,它将启动服务器并等待客户端连接。

然后运行一个或多个 ChatClient 实例,它们将连接到服务器并允许用户输入消息。

用户在客户端输入的消息将被发送到服务器,服务器将广播给所有连接的客户端。

注意事项

这个聊天室实现是多线程的,每个客户端连接都会创建一个新的线程。

客户端和服务器之间的通信使用TCP协议。

这个实现是基本的,没有考虑异常处理、断线重连、用户身份验证等高级特性。

为了更好的用户体验,你可以考虑添加图形用户界面(GUI),使用Swing或JavaFX等库。

这个聊天室是一个基础的示例,可以根据你的需要进行扩展和改进。

相关推荐
小天源3 小时前
智叟云集系统整体架构解析:多语言 API 接入、异步监控与本地化部署
架构·数据采集·数据中台·ai监测系统·geo数据监测
真上帝的左手3 小时前
10. 软件设计&架构-分布式文件存储系统
分布式·架构·应用架构
弈栈录3 小时前
大模型服务抽象:兼容 OpenAI、通义千问与本地模型
java·后端·架构
CCblandy4 小时前
一致性哈希到底省了多少搬迁?本机实测 3 轮:取模 6→7 搬 85.8%,V=128 只搬 14.3%,虚拟节点太少会被倾斜骗
后端·python·云原生·性能优化·架构
code_slave(码畜)4 小时前
微服务架构落地:OpenFeign 服务远程调用 + 线程池隔离架构实战 —— 超时控制、重试机制、线程池隔离,防雪崩
spring boot·spring cloud·微服务·云原生·架构·openfeign
小天源5 小时前
智叟云集定时采集与消息推送架构——实现可恢复的订阅通知流程
架构·sass·权限管理·多租户·服务商 api·ai采集
Shaoshing5 小时前
存储引擎与架构
java·开发语言·架构
whyutianict_vv5 小时前
AI 大模型技术架构解析:从推理链路到训练流程
人工智能·ai·架构·开发
企业解惑小助手5 小时前
企业 AI 工具泄密怎么防护整体方案设计|需求拆解与落地架构
人工智能·架构·域智盾
智慧光迅AINOPOL5 小时前
10~50 人规模办公网络组网技术分析:架构对比与选型参考
网络·架构·智能路由器