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

Java ME Socket 通信開發全攻略:手機端與服務器、手機對手機雙模式實現

     編輯:Java 相關知識

為什麼選擇 Socket 而非 HTTP?

Java ME 網絡開發常用 HTTP 與 Socket 兩種協議。HTTP 為短連接,某些手機會頻繁彈出「連接網絡」提示,體驗極差。Socket 長連接可由客戶端主動發起,大幅改善用戶體驗,適用於即時通訊、遊戲對戰等場景。

模式一:手機客戶端 ↔ 服務器端

服務器端(Java SE)

ServerSocket server = new ServerSocket(4321);
while (true) {
    Socket socket = server.accept(); // 阻塞等待連接
    new ServerThread(socket).start(); // 每連接一線程
}

線程中打開輸入/輸出流進行數據交換。

客戶端(Java ME)

Java ME 不使用 Socket,而是 SocketConnection,由 Connector.open() 建立:

SocketConnection sc = (SocketConnection) Connector.open("socket://127.0.0.1:4321");
// 獲取通信流
DataInputStream dis = sc.openDataInputStream();
DataOutputStream dos = sc.openDataOutputStream();
// 進行數據收發

模式二:手機端 ↔ 手機端(P2P)

一機作服務端,一機作客戶端。客戶端同模式一。服務端使用 ServerSocketConnection:

ServerSocketConnection ssc = (ServerSocketConnection) Connector.open("socket://:1234");
SocketConnection sc = (SocketConnection) ssc.acceptAndOpen(); // 阻塞等待連接
// 後續通信流操作同上

關鍵差異對照表

層面Java SE 服務端Java ME 客戶端/服務端
Server 類ServerSocketServerSocketConnection
Client 類SocketSocketConnection
建立連接new ServerSocket(port)Connector.open("socket://:port")
接受連接accept() → SocketacceptAndOpen() → SocketConnection
客戶端連接new Socket(ip, port)Connector.open("socket://ip:port")

實戰提示

  • 所有網絡操作必須在非 UI 線程執行,避免阻塞界面。
  • 妥善處理 IOException,網絡斷開、對方關閉均會拋出異常。
  • 數據協議設計建議採用「長度前綴 + 數據體」或分隔符,解決粘包/半包問題。
  • 簽名權限:需在 JAD/Manifest 中聲明 javax.microedition.io.Connector.socket。

掌握這兩種模式,即可覆蓋 Java ME 時代絕大多數 Socket 通信場景。

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