S SmartDocs
系列: Angelia java 42 行 · 更新於 2026-09-27

EchoClient.java

Angelia/Java/Week_6_7/code/08_chat_protocol/EchoClient.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

/**
 * 最小的客戶端:連上伺服器,送出一段固定的對話,印出伺服器的每一則回應。
 *
 * 執行(先啟動 EchoServer):java EchoClient localhost 5555
 */
public class EchoClient {

    public static void main(String[] args) throws IOException {
        String host = args.length > 0 ? args[0] : "localhost";
        int port = args.length > 1 ? Integer.parseInt(args[1]) : 5555;

        try (Socket socket = new Socket(host, port);                 // 主動連到伺服器
             BufferedReader in = new BufferedReader(
                     new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8));
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true, StandardCharsets.UTF_8)) {

            String[] script = {
                "SAY general hi",            // 還沒登入 → ERR 401
                "LOGIN angelia",             // → OK welcome angelia
                "JOIN general",              // → OK joined general
                "SAY general hello world",   // → MSG general angelia hello world
                "DANCE",                     // 未知指令 → ERR 400
                "QUIT"                       // → BYE
            };
            for (String line : script) {
                System.out.println(">>> " + line);
                out.println(line);                                    // 送出一行
                String reply = in.readLine();                         // 等一行回應
                System.out.println("<<< " + reply);
                ChatMessage parsed = ChatMessage.parse(reply);        // 客戶端也用同一份 parser
                System.out.println("    解析結果:" + parsed);
            }
        }
    }
}

相關文章