Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java聊天室代码

作者:—上花′Ing   发布日期:2025-06-09   浏览:82

// Java聊天室代码示例

import java.io.*;
import java.net.*;
import java.util.*;

public class ChatServer {
    private static final int PORT = 12345;
    private static HashSet<String> names = new HashSet<>();
    private static HashSet<PrintWriter> writers = new HashSet<>();

    public static void main(String[] args) {
        System.out.println("Chat Server is running...");
        try (ServerSocket listener = new ServerSocket(PORT)) {
            while (true) {
                new Handler(listener.accept()).start();
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

    private static class Handler extends Thread {
        private String name;
        private Socket socket;
        private BufferedReader in;
        private PrintWriter out;

        public Handler(Socket socket) {
            this.socket = socket;
        }

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

                // Ask for the user's name.
                out.println("SUBMITNAME");
                name = in.readLine();
                if (name == null) {
                    return;
                }
                synchronized (names) {
                    if (!names.contains(name)) {
                        names.add(name);
                        writers.add(out);
                    } else {
                        out.println("NAMEINUSE");
                        return;
                    }
                }
                out.println("NAMEACCEPTED");

                // Start conversation.
                while (true) {
                    String input = in.readLine();
                    if (input.toLowerCase().equals("/quit")) {
                        return;
                    }
                    for (PrintWriter writer : writers) {
                        writer.println("MESSAGE " + name + ": " + input);
                    }
                }
            } catch (IOException e) {
                System.out.println(e.getMessage());
            } finally {
                if (name != null) {
                    names.remove(name);
                }
                if (out != null) {
                    writers.remove(out);
                }
                try {
                    socket.close();
                } catch (IOException e) {
                }
            }
        }
    }
}

解释说明:

  1. 服务器端代码:这个Java程序实现了简单的聊天室服务器。它监听指定端口(默认为12345),接受客户端连接,并处理每个客户端的聊天消息。
  2. Handler类:每个连接到服务器的客户端都会启动一个新的Handler线程来处理通信。该线程负责读取客户端的消息,并将消息广播给所有其他连接的客户端。
  3. 用户名称管理:使用HashSet来存储当前在线用户的名称,确保每个用户名是唯一的。如果用户尝试使用已存在的名称,服务器会通知客户端重新输入。
  4. 消息广播:当一个用户发送消息时,服务器会将该消息转发给所有其他在线用户。

希望这段代码和解释对你有帮助!

上一篇:java 抽象

下一篇:java list 对象排序

大家都在看

java连接数据库的代码

ubuntu 卸载java

java sort用法

java collections.sort

java file类的方法

java 判断

java时间数据类型

java 时间加一天

java demo

java 截取

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站