受限設備無法使用完整 java.net/java.io,CLDC 定義 Generic Connection Framework(GCF)提供統一網絡抽象。本文梳理接口繼承體系、核心類職責,並示範 HTTP 与 Socket 兩種最常用連接模式。
Connection (根接口,唯一方法 close())
├─ StreamConnection // 流式連接基礎
│ ├─ InputConnection // 定義 openInputStream()
│ ├─ OutputConnection // 定義 openOutputStream()
│ ├─ StreamConnectionNotifier // 監聽器,acceptAndOpen() 返回 StreamConnection
│ │ └─ ServerSocketConnection // Socket 伺服器端
│ └─ SocketConnection // Socket 客戶端,繼承 StreamConnection
├─ DatagramConnection // 資料報基礎
│ └─ UDPDatagramConnection // UDP 通訊
└─ ContentConnection // 內容屬性(getEncoding/Length/Type)
└─ HttpConnection // HTTP 客戶端,MIDP 強制實現
└─ HttpsConnection // HTTPS(MIDP 2.0+)
└─ SecureConnection // 安全連接基礎 (MIDP 2.0+)
Connector工廠方法 Connector.open(String url) 依 URL 協議自動返回對應連接實例。URL 格式遵循 RFC 2396:{scheme}:[{target}][{params}]。常見範例:
https://host:port/path → HttpConnectionsocket://host:port → SocketConnectionsocket://:port → ServerSocketConnection(伺服器監聽)datagram://host:port → UDPDatagramConnectionString url = "https://example.com/api?param=value";
HttpConnection conn = (HttpConnection) Connector.open(url);
conn.setRequestMethod(HttpConnection.GET);
DataInputStream dis = new DataInputStream(conn.openInputStream());
// 讀取回應...
dis.close(); conn.close();
注意:中文回應需手動轉碼(如 new String(bytes, "ISO8859_1").getBytes("GB2312"))。
客戶端:
StreamConnection conn = (StreamConnection) Connector.open("socket://192.168.0.1:6666");
OutputStream os = conn.openOutputStream(); os.write(data); os.flush(); os.close();
InputStream is = conn.openInputStream(); // 讀取回應...
伺服器端:
ServerSocketConnection ssc = (ServerSocketConnection) Connector.open("socket://:6666");
while (true) {
SocketConnection sc = (SocketConnection) ssc.acceptAndOpen();
new Thread(() -> handle(sc)).start(); // 處理輸入/輸出流
}
移動網關分配虛擬 IP,隨基站切換可能變更,不可依賴長連接 IP 進行伺服器主動推播,建議採用客戶端輪詢或短連接模式。
嚴格遵循 finally 區塊關閉所有流與連接,避免句柄洩漏導致後續連接失敗。