首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Socket 類別完整指南:從基礎建構到客戶端實作

     編輯:Java 相關知識

前言

java.net.Socket 是 Java 網路程式設計的核心類別,代表客戶端與伺服器之間的雙向通訊端點。本文詳細說明 Socket 建構子、常用方法、輸入輸出流處理,並提供完整的客戶端程式範例與執行結果。

Socket 建構子

建構子說明
Socket(InetAddress addr, int port)指定 InetAddress 物件與連接埠建立連線。
Socket(String host, int port)指定主機名稱/IP 與連接埠建立連線。若主機名解析失敗拋 UnknownHostException。

兩者皆建立基於 TCP 的流式 Socket。成功連線後,本地端會綁定任意可用連接埠;失敗拋 IOException。

關鍵方法

  • getInputStream():取得輸入串流讀取伺服器資料。
  • getOutputStream():取得輸出串流發送資料給伺服器。
  • close():關閉 Socket 及相關串流。
  • getLocalAddress() / getLocalPort():本地端 IP/埠。
  • getInetAddress() / getPort():遠端伺服器 IP/埠。

基本使用範例

Socket s = new Socket("198.163.227.6", 13);
InputStream is = s.getInputStream();
// 讀取資料...
is.close();
s.close();

完整客戶端實作:SSClient

import java.io.*;
import java.net.*;

class SSClient {
    public static void main(String[] args) {
        String host = "localhost";
        if (args.length == 1) host = args[0];

        BufferedReader br = null;
        PrintWriter pw = null;
        Socket s = null;

        try {
            s = new Socket(host, 10000); // 連接伺服器埠 10000

            // 建立字元導向的 BufferedReader
            InputStreamReader isr = new InputStreamReader(s.getInputStream());
            br = new BufferedReader(isr);

            // 建立自動刷新的 PrintWriter
            pw = new PrintWriter(s.getOutputStream(), true);

            // 發送指令並接收回應
            pw.println("DATE");
            System.out.println(br.readLine()); // 印出目前日期時間

            pw.println("PAUSE"); // 測試多執行緒
            pw.println("DOW");
            System.out.println(br.readLine()); // 印出星期

            pw.println("DOM");
            System.out.println(br.readLine()); // 印出日期

            pw.println("DOY");
            System.out.println(br.readLine()); // 印出年間第幾天

        } catch (IOException e) {
            System.out.println(e.toString());
        } finally {
            // 依序關閉資源
            try { if (br != null) br.close(); } catch (IOException ignored) {}
            try { if (pw != null) pw.close(); } catch (IOException ignored) {}
            try { if (s != null) s.close(); } catch (IOException ignored) {}
        }
    }
}

執行結果範例

Tue Jan 29 18:11:51 CST 2002
TUESDAY
29
29

執行說明

  1. 編譯:javac SSClient.java
  2. 執行:java SSClient [hostname](預設 localhost,可指定如 www.example.com)。
  3. 需有對應伺服器程式在埠 10000 監聽並支援 DATE/PAUSE/DOW/DOM/DOY 指令。

資源管理最佳實踐

  • 使用 try-with-resources (Java 7+) 自動關閉 Socket、Reader、Writer。
  • 區分關閉順序:先關閉應用層串流,再關閉 Socket。
  • 設定連線逾時:s.connect(new InetSocketAddress(host, port), timeoutMs) 避免無限阻塞。

結語

Socket 是 Java 網路通訊的基石。掌握其建構、串流鏈接、資源釋放與異常處理,即可開發穩健的客戶端應用。進階主題包含非阻塞 I/O (NIO)、SSL/TLS 安全通訊、連線池管理等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved