阿摩線上測驗 登入

申論題資訊

試卷:98年 - 098年專門職業及技術人員高等建築師、技師、消防設備師、普通不動產經紀人、記帳士、第二次消防設備士暨語言治療師資訊技師#32441
科目:程式設計
年份:98年
排序:0

題組內容

五、Java 提供網路程式設計所需的 sockets。

申論題內容

⑵試寫一 Java 的 TCP 日期伺服程式(date server),其 port number 為 6013,當 client 連上來時,將目前伺服器的時間送回給 client。(10 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
以下是一個簡單的TCP日期伺服器程式,它監聽端口6013,當客戶端連接時,會向客戶端發送當前的伺服器時間。
java

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
public class DateServer {
    public static void main(String[] args) {
        // 伺服器端口號
        int port = 6013;
        // 使用 try-with-resources 語句來自動關閉資源
        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("DateServer started on port " + port);
            // 伺服器無限迴圈,等待客戶端連接
            while (true) {
                // 等待客戶端連接
                try (Socket clientSocket = serverSocket.accept()) {
                    System.out.println("Client connected from " + clientSocket.getInetAddress());
                    // 發送當前日期和時間給客戶端
                    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
                    out.println(new Date().toString());
                    // 客戶端接收到數據後,連接自動關閉
                } catch (IOException e) {
                    System.err.println("Error when connecting to client: " + e.getMessage());
                }
            }
        } catch (IOException e) {
            System.err.println("Could not listen on port " + port);
            System.err.println(e.getMessage());
            System.exit(1);
        }
    }
}
在這個程式中:
我們首先創建一個ServerSocket實例來監聽指定的端口(6013)。
然後程式進入一個無限迴圈中,不斷等待客戶端的連接。
一旦serverSocket.accept()方法捕捉到一個客戶端連接請求,它就會返回一個新的Socket實例,用於與客戶端通信。
接著,我們通過這個Socket實例的輸出流發送當前日期和時間給客戶端。
發送完畢後,由於我們在try-with-resources語句中創建了Socket,它會自動關閉連接。
如果伺服器Socket無法在指定端口啟動或處理連接時出現問題,異常將被捕捉並列印錯誤消息,然後程式退出。
請注意,這個簡單的伺服器沒有處理併發,它一次只能處理一個客戶端連接。在實際的生產環境中,你可能需要使用線程來支持多個併發客戶端連接。