Java ME 網絡開發常用 HTTP 與 Socket 兩種協議。HTTP 為短連接,某些手機會頻繁彈出「連接網絡」提示,體驗極差。Socket 長連接可由客戶端主動發起,大幅改善用戶體驗,適用於即時通訊、遊戲對戰等場景。
ServerSocket server = new ServerSocket(4321);
while (true) {
Socket socket = server.accept(); // 阻塞等待連接
new ServerThread(socket).start(); // 每連接一線程
}
線程中打開輸入/輸出流進行數據交換。
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();
// 進行數據收發
一機作服務端,一機作客戶端。客戶端同模式一。服務端使用 ServerSocketConnection:
ServerSocketConnection ssc = (ServerSocketConnection) Connector.open("socket://:1234");
SocketConnection sc = (SocketConnection) ssc.acceptAndOpen(); // 阻塞等待連接
// 後續通信流操作同上
| 層面 | Java SE 服務端 | Java ME 客戶端/服務端 |
|---|---|---|
| Server 類 | ServerSocket | ServerSocketConnection |
| Client 類 | Socket | SocketConnection |
| 建立連接 | new ServerSocket(port) | Connector.open("socket://:port") |
| 接受連接 | accept() → Socket | acceptAndOpen() → SocketConnection |
| 客戶端連接 | new Socket(ip, port) | Connector.open("socket://ip:port") |
IOException,網絡斷開、對方關閉均會拋出異常。javax.microedition.io.Connector.socket。掌握這兩種模式,即可覆蓋 Java ME 時代絕大多數 Socket 通信場景。