以下是一个使用Java的Swing编写的简单聊天室的服务端和客户端代码示例:

服务端代码:

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

public class Server {
    private static final int PORT = 12345;
    private static Set<PrintWriter> clients = new HashSet<>();

    public static void main(String[] args) throws Exception {
        System.out.println("服务器运行中...");
        ServerSocket serverSocket = new ServerSocket(PORT);
        try {
            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.out.println("客户端连接: " + clientSocket);
                PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
                clients.add(writer);
                new ClientHandler(clientSocket, writer).start();
            }
        } finally {
            serverSocket.close();
        }
    }

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

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

        public void run() {
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                String message;
                while ((message = reader.readLine()) != null) {
                    System.out.println("接收到消息: " + message);
                    broadcast(message);
                }
            } catch (IOException e) {
                System.out.println("客户端断开连接: " + clientSocket);
            } finally {
                if (writer != null) {
                    clients.remove(writer);
                }
                try {
                    clientSocket.close();
                } catch (IOException e) {
                }
            }
        }
    }

    private static void broadcast(String message) {
        for (PrintWriter client : clients) {
            client.println(message);
            client.flush();
        }
    }
}

客户端代码:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;

public class Client {
    private static final String SERVER_HOST = "localhost";
    private static final int SERVER_PORT = 12345;
    private static final String USERNAME = "Guest";

    private JFrame frame;
    private JTextField messageField;
    private JTextArea chatArea;
    private PrintWriter writer;

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            try {
                Client client = new Client();
                client.frame.setVisible(true);
                client.connectToServer();
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
    }

    public Client() {
        initialize();
    }

    private void initialize() {
        frame = new JFrame();
        frame.setTitle("聊天室");
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new BorderLayout());

        JScrollPane scrollPane = new JScrollPane();
        frame.getContentPane().add(scrollPane, BorderLayout.CENTER);

        chatArea = new JTextArea();
        chatArea.setEditable(false);
        scrollPane.setViewportView(chatArea);

        JPanel panel = new JPanel();
        frame.getContentPane().add(panel, BorderLayout.SOUTH);
        panel.setLayout(new BorderLayout());

        messageField = new JTextField();
        panel.add(messageField, BorderLayout.CENTER);
        messageField.setColumns(10);
        messageField.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sendMessage();
            }
        });

        JButton sendButton = new JButton("发送");
        panel.add(sendButton, BorderLayout.EAST);
        sendButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sendMessage();
            }
        });
    }

    private void connectToServer() throws IOException {
        Socket socket = new Socket(SERVER_HOST, SERVER_PORT);
        writer = new PrintWriter(socket.getOutputStream());
        new Thread(new ServerListener(socket)).start();
    }

    private void sendMessage() {
        String message = messageField.getText();
        writer.println(USERNAME + ": " + message);
        writer.flush();
        messageField.setText("");
    }

    private class ServerListener implements Runnable {
        private Socket socket;

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

        public void run() {
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String message;
                while ((message = reader.readLine()) != null) {
                    chatArea.append(message + "\n");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

这个简单的聊天室使用Swing界面库来创建客户端界面,并通过Socket进行客户端和服务端之间的通信。客户端可以通过输入框发送消息,服务端会将接收到的消息广播给所有连接的客户端

请做一个功能俱全的使用Java的swing的聊天室服务端和客户端代码

原文地址: https://www.cveoy.top/t/topic/iyE9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录