java怎么編寫(xiě)簡(jiǎn)單聊天室

小億
81
2024-09-26 03:49:10

要用Java編寫(xiě)一個(gè)簡(jiǎn)單的聊天室,你可以使用套接字編程(Socket Programming)。這里是一個(gè)基本的聊天室實(shí)現(xiàn)教程:

  1. 創(chuàng)建服務(wù)器端(Server)代碼:
import java.io.*;
import java.net.*;

public class ChatServer {
    private static final int PORT = 12345;
    private static Socket socket;

    public static void main(String[] args) throws IOException {
        serverSocket = new ServerSocket(PORT);
        System.out.println("服務(wù)器啟動(dòng),等待客戶端連接...");

        while (true) {
            socket = serverSocket.accept();
            System.out.println("客戶端已連接:" + socket.getInetAddress());

            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

            String userInput;
            while ((userInput = in.readLine()) != null) {
                System.out.println("收到消息:" + userInput);
                broadcastMessage(out, userInput);
            }

            socket.close();
        }
    }

    private static void broadcastMessage(PrintWriter out, String message) {
        for (Socket client : new ArrayList<Socket>(clients)) {
            if (client != socket) {
                try {
                    out.println(message);
                } catch (IOException e) {
                    e.printStackTrace();
                    clients.remove(client);
                    try {
                        client.close();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            }
        }
    }
}
  1. 創(chuàng)建客戶端(Client)代碼:
import java.io.*;
import java.net.*;

public class ChatClient {
    private static final String SERVER_ADDRESS = "localhost";
    private static final int PORT = 12345;
    private static Socket socket;
    private static BufferedReader in;
    private static PrintWriter out;

    public static void main(String[] args) throws IOException {
        socket = new Socket(SERVER_ADDRESS, PORT);
        System.out.println("已連接到服務(wù)器:" + SERVER_ADDRESS + ":" + PORT);

        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        out = new PrintWriter(socket.getOutputStream(), true);

        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        String userInput;

        while (true) {
            System.out.print("請(qǐng)輸入消息:");
            userInput = stdIn.readLine();
            if (userInput.equalsIgnoreCase("exit")) {
                break;
            }
            out.println(userInput);
            System.out.println("服務(wù)器回復(fù):" + in.readLine());
        }

        socket.close();
    }
}
  1. 分別運(yùn)行服務(wù)器端和客戶端代碼。首先啟動(dòng)服務(wù)器端,然后啟動(dòng)一個(gè)或多個(gè)客戶端?,F(xiàn)在可以在客戶端輸入消息并查看服務(wù)器的回復(fù)。

注意:這個(gè)示例僅適用于單個(gè)服務(wù)器和客戶端。要實(shí)現(xiàn)多個(gè)客戶端之間的通信,可以將客戶端添加到clients列表中,并在broadcastMessage方法中遍歷該列表以向所有客戶端發(fā)送消息。同時(shí),為了簡(jiǎn)化代碼,這里沒(méi)有處理異常。在實(shí)際應(yīng)用中,應(yīng)該對(duì)異常進(jìn)行適當(dāng)?shù)奶幚怼?/p>

0