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

J2ME Socket 網路程式設計實戰:基於 MIDP 2.0 TCP 通訊完整範例

     編輯:Java 程式設計入門

GCF 統一介面下的 TCP 開發

MIDP 2.0 在 javax.microedition.io 提供 ServerSocketConnection、SocketConnection,繼承自 GCF Connection 介面,編程模式與 Datagram 高度一致。

伺服器端關鍵步驟

  1. ServerSocketConnection scn = (ServerSocketConnection) Connector.open("socket://:5009"); 監聽埠 5009。
  2. SocketConnection sc = (SocketConnection) scn.acceptAndOpen(); 阻塞等待客戶端,返回連線專用 Socket。
  3. 設定 Socket 選項:DELAY=0 (Nagle 關閉)、LINGER=0、KEEPALIVE、緩衝區大小。
  4. 取得資料流:DataInputStream is = sc.openDataInputStream();、DataOutputStream os = sc.openDataOutputStream();
  5. 迴圈收發:String msg = is.readUTF(); os.writeUTF(msg); (回聲伺服器)。
  6. 關閉順序:資料流 → Socket → ServerSocket。

客戶端關鍵步驟

  1. SocketConnection sc = (SocketConnection) Connector.open("socket://host:5009");
  2. 設定選項 (如 LINGER=5)。
  3. 取得 InputStream/OutputStream (或 Data 版本)。
  4. 發送請求、接收回應。
  5. 關閉資源。

完整 MIDlet 範例架構 (雙模式:伺服器/客戶端)

// 主 MIDlet:選單選擇模式
public class SocketMIDlet extends MIDlet implements CommandListener {
    private Form form; private ChoiceGroup cg;
    private Server server; private Client client;
    // ... UI 初始化、commandAction 啟動對應執行緒 ...
}

// 伺服器執行緒
class Server implements Runnable, CommandListener {
    private ServerSocketConnection scn; private SocketConnection sc;
    private DataInputStream is; private DataOutputStream os;
    public void run() {
        try {
            scn = (ServerSocketConnection) Connector.open("socket://:5009");
            sc = (SocketConnection) scn.acceptAndOpen();
            is = sc.openDataInputStream(); os = sc.openDataOutputStream();
            // 迴圈 readUTF / writeUTF
        } catch (IOException e) { /* 處理埠佔用、斷線 */ }
    }
    // commandAction 處理發送/離開按鈕
    public void stop() { /* 關閉所有資源 */ }
}

// 客戶端執行緒 (結構對稱)
class Client implements Runnable, CommandListener {
    private SocketConnection sc;
    private DataInputStream is; private DataOutputStream os;
    public void run() {
        try {
            sc = (SocketConnection) Connector.open("socket://localhost:5009");
            is = sc.openDataInputStream(); os = sc.openDataOutputStream();
            // 迴圈收發
        } catch (ConnectionNotFoundException e) { /* 提示先啟動伺服器 */ }
    }
}

關鍵最佳實踐

  • 所有網路 I/O 必須在獨立執行緒,否則阻塞事件分派執行緒導致 UI 凍結。
  • 資源關閉順序嚴格:輸出流 → 輸入流 → Socket → ServerSocket,並在 finally 或 destroyApp 保證釋放。
  • 異常處理區分:ConnectionNotFoundException (伺服器未啟動)、IOException (斷線/超時)、一般 Exception。
  • 傳輸協定設計:示例用 UTF 字串換行分隔;實務建議定義二進位協定 (長度前綴 + 指令碼 + Payload) 或採用輕量序列化 (Protocol Buffers Micro、JSON ME)。
  • 安全性:生產環境需加入 TLS (GCF ssl://)、雙向認證、資料加密。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved