基于JavaSwing的聊天室支持群聊和私聊

实现了一个简单的聊天应用,包括聊天服务器 (ChatServer) 和聊天客户端 (ChatClient)。下面是对代码的详细讲解:

  1. 聊天服务器 (ChatServer)
    主要功能:
    启动一个服务器,监听客户端的连接请求。
    处理用户的登录和注册请求。
    允许用户发送公共消息和私聊消息。
    将聊天记录保存到数据库,并支持导出聊天记录。
    关键部分:
    数据库连接:服务器启动时连接到 MySQL 数据库,用于存储用户信息和聊天记录。
java
dbConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/ChatApp", "root", "1234");

客户端处理:每当有新客户端连接时,服务器会为其创建一个新的 ClientHandler 线程,处理该客户端的请求。

java
new ClientHandler(socket).start();

用户管理:使用 HashMap 存储已连接的客户端,键为用户名,值为 ClientHandler 实例。

java
private HashMap<String, ClientHandler> clients = new HashMap<>();

消息广播:服务器可以将消息广播给所有已连接的客户端。

java
public synchronized void broadcastMessage(String message, String sender) {
    for (ClientHandler client : clients.values()) {
        client.sendMessage(message);
    }
}

用户列表更新:每当用户登录或断开连接时,服务器会更新用户列表并广播在线用户信息。

java
public synchronized void updateUserList() {
    userListModel.clear();
    for (String username : clients.keySet()) {
        userListModel.addElement(username);
    }
}

聊天记录导出:用户可以通过 GUI 界面将聊天记录导出到文本文件中。

java
private void exportChatLog() {
    FileWriter writer = new FileWriter("chat_log.txt");
    writer.write(chatLogArea.getText());
    writer.close();
}
  1. 聊天客户端 (ChatClient)
    主要功能:
    连接到聊天服务器。
    提供用户登录和注册界面。
    显示聊天记录和发送消息。
    支持私聊功能。
    关键部分:
    连接服务器:客户端通过 Socket 连接到指定的服务器地址和端口。
java
socket = new Socket(serverAddress, port);

用户界面:使用 Swing 创建用户登录/注册界面和聊天界面,用户可以在这些界面中输入用户名和密码。

java
private void showLoginOrRegisterUI() {
    // 创建登录/注册界面
}

发送和接收消息:客户端可以发送消息到服务器,并通过 IncomingMessagesHandler 线程接收来自服务器的消息。

java
public void sendMessage(JTextField inputField) {
    out.println(message);
}

私聊功能:用户可以选择发送私聊消息,通过指定接收者的用户名进行私聊。

java
private void showPrivateChatUI() {
    // 创建私聊界面
}
  1. 数据库操作
    用户验证:在登录时,服务器会查询数据库验证用户的用户名和密码。
java
private boolean validateLogin(String username, String password) {
    PreparedStatement stmt = dbConnection.prepareStatement("SELECT * FROM users WHERE username = ? AND password = ?");
    // ...
}

用户注册:在注册时,服务器会尝试将新用户信息插入到数据库中。

java
private boolean registerUser(String username, String password) {
    PreparedStatement stmt = dbConnection.prepareStatement("INSERT INTO users (username, password) VALUES (?, ?)");
    // ...
}

消息存储:每当用户发送消息时,服务器会将消息存储到数据库中。

java
private void saveMessageToDatabase(String sender, String receiver, String message) {
    PreparedStatement stmt = dbConnection.prepareStatement("INSERT INTO messages (sender, receiver, message) VALUES (?, ?, ?)");
    // ...
}

总结
这个聊天应用的设计相对简单,但实现了基本的聊天功能,包括用户管理、消息发送和接收、私聊功能以及聊天记录的存储和导出。可以作为学习 Java 网络编程和 GUI 编程的一个良好示例。
在这里插**加粗样式**入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 聊天服务器类
public class ChatServer {
    private ServerSocket serverSocket;
    private HashMap<String, ClientHandler> clients = new HashMap<>(); // 存储已连接的客户端
    private Connection dbConnection;
    private DefaultListModel<String> userListModel; // 用户列表模型
    private JList<String> userList; // 用户列表视图
    private JTextArea chatLogArea; // 聊天记录区域

    // 启动服务器方法
    public void startServer(int port) {
        try {
            // 连接到数据库
            dbConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/ChatApp", "root", "1234"); // 修改为您的数据库信息
            serverSocket = new ServerSocket(port);
            System.out.println("服务器已启动,端口号: " + port);

            // 创建用户列表窗口
            createUserListWindow();

            // 不断接受客户端连接
            while (true) {
                Socket socket = serverSocket.accept();
                System.out.println("新客户端已连接: " + socket.getInetAddress());
                new ClientHandler(socket).start(); // 为每个客户端启动独立的线程
            }
        } catch (IOException | SQLException e) {
            e.printStackTrace();
        } finally {
            stopServer();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值