以下是一個簡單的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無法在指定端口啟動或處理連接時出現問題,異常將被捕捉並列印錯誤消息,然後程式退出。
請注意,這個簡單的伺服器沒有處理併發,它一次只能處理一個客戶端連接。在實際的生產環境中,你可能需要使用線程來支持多個併發客戶端連接。