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

實戰教學:Java Socket 程式設計核心類詳解

     編輯:Java 程式設計入門

簡介

Java 平台在 java.net 套件中實作 Socket 通訊。本文將介紹該套件中最常用的三個核心類別:

  • URLConnection
  • Socket
  • ServerSocket

java.net 還包含更多類別,但這三個是開發中最常遇到的。我們先從 URLConnection 開始,它提供在 Java 程式碼中使用 Socket 的方法,無需了解底層機制。

甚至不用嘗試就能使用 Sockets

連接到一個 URL 包含以下步驟:

  • 建立一個 URLConnection
  • 使用不同的 setter 方法進行配置
  • 連接到 URLConnection
  • 透過不同的 getter 方法進行互動

下面我們透過範例示範如何使用 URLConnection 從伺服器請求文件。

URLClient 類別

我們先從 URLClient 類別的結構開始講起。

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

public class URLClient {
    protected URLConnection connection;

    public static void main(String[] args) { }

    public String getDocumentAt(String urlString) { }
}

注意:必須先導入 java.net 和 java.io 套件。

我們給類別一個實例變數用於保存 URLConnection。類別包含 main() 方法處理瀏覽文件的邏輯流,以及 getDocumentAt() 方法用於連接伺服器並請求文件,下面我們將探究這些方法的細節。

瀏覽文件

main() 方法處理瀏覽文件的邏輯流:

public static void main(String[] args) {
    URLClient client = new URLClient();
    String yahoo = client.getDocumentAt("https://www.yahoo.com");
    System.out.println(yahoo);
}

main() 方法僅建立一個新的 URLClient 實例,並使用有效的 URL 字串呼叫 getDocumentAt() 方法。當呼叫返回文件時,我們將其儲存在 String 中並輸出到控制台。然而,實際工作是在 getDocumentAt() 方法中完成的。

從伺服器請求文件

getDocumentAt() 方法處理實際如何從網路上取得文件:

public String getDocumentAt(String urlString) {
    StringBuffer document = new StringBuffer();
    try {
        URL url = new URL(urlString);
        URLConnection conn = url.openConnection();
        BufferedReader reader = new BufferedReader(
            new InputStreamReader(conn.getInputStream()));
        String line = null;
        while ((line = reader.readLine()) != null) {
            document.append(line + "\n");
        }
        reader.close();
    } catch (MalformedURLException e) {
        System.out.println("Unable to connect to URL: " + urlString);
    } catch (IOException e) {
        System.out.println("IOException when connecting to URL: " + urlString);
    }
    return document.toString();
}

getDocumentAt() 方法接受一個包含目標文件 URL 的 String 參數。我們先建立 StringBuffer 儲存文件行。接著用傳入的 urlString 建立 URL 物件,建立 URLConnection 並開啟連線:

URLConnection conn = url.openConnection();

取得 URLConnection 後,取得其 InputStream 並包裝為 InputStreamReader,再包裝為 BufferedReader 以便讀取伺服器回傳的文件行。這種包裝技術在處理 Socket 時常用,務必熟悉:

BufferedReader reader = new BufferedReader(
    new InputStreamReader(conn.getInputStream()));

有了 BufferedReader,即可輕鬆讀取文件內容。在 while 迴圈中呼叫 readLine() 方法:

String line = null;
while ((line = reader.readLine()) != null) {
    document.append(line + "\n");
}

呼叫 readLine() 從 InputStream 讀入行結束符(如換行符)時會阻塞;若無資料則持續等待,連線關閉時回傳 null。取得一行後,連同換行符附加到 StringBuffer,保留原文件格式。

讀取完所有行後,關閉 BufferedReader:

reader.close();

若提供給 URL 建構子的 urlString 無效,會拋出 MalformedURLException;其他錯誤(如取得 InputStream 失敗)則拋出 IOException。

總結

  1. 用有效的 URL 字串實例化 URL
  2. 連接到指定 URL
  3. 將連線的 InputStream 包裝為 BufferedReader 以讀取行
  4. 用 BufferedReader 讀取文件內容
  5. 關閉 BufferedReader
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved