阿摩線上測驗 登入

申論題資訊

試卷:100年 - 100年專門職業及技術人員高等建築師、技師、第2次食品技師暨普通不動產經紀人、記帳士考高等_資訊技師#40649
科目:程式設計
年份:100年
排序:0

題組內容

一、試以 Java 語言撰寫下列各子題所要求之工作(假設所需的類別都已 import):(20 分)

申論題內容

⑴一個網頁伺服器(web server)程式可以在其 port(port number 8000)接受多個 client 建立 socket 連線,並且以一個執行緒(thread)處理一個 client 的連線。

詳解 (共 1 筆)

詳解 提供者:hchungw
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class WebServer {
    public static void main(String[] args) throws IOException {
        final int port = 8000;
        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("Web server started on port " + port);
        try {
            while (true) {
                // 等待客戶端連線
                Socket clientSocket = serverSocket.accept();
                System.out.println("New client connected");
                // 為每個客戶端連線創建一個新的執行緒
                new Thread(new ClientHandler(clientSocket)).start();
            }
        } finally {
            serverSocket.close();
        }
    }
    private static class ClientHandler implements Runnable {
        private Socket clientSocket;
        public ClientHandler(Socket socket) {
            this.clientSocket = socket;
        }
        @Override
        public void run() {
            try {
                // 從客戶端讀取數據
                BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                // 向客戶端寫數據
                PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
                String line;
                while ((line = in.readLine()) != null) {
                    System.out.println("Received: " + line);
                    if (line.isEmpty()) {
                        break;
                    }
                }
                // 發送 HTTP 響應
                out.println("HTTP/1.1 200 OK");
                out.println("Content-Type: text/plain");
                out.println();
                out.println("Hello, World!");
                // 關閉資源
                out.close();
                in.close();
                clientSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
在這個例子中,WebServer 類別創建一個 ServerSocket 來在 8000 端口監聽。對於每個連接的客戶端,它會接受連接,並為該連接創建一個新的 Thread,該線程執行 ClientHandler 類別的實例。ClientHandler 實現了 Runnable 接口,負責處理客戶端的請求:讀取輸入,並響應一個簡單的 HTTP 響應。
這個示例是一個基本的起點。在實際應用中,你可能需要擴展 ClientHandler 以處理更複雜的請求,管理請求的不同類型,並提供更豐富的響應內容。