MIDP 2.0 在 javax.microedition.io 提供 ServerSocketConnection、SocketConnection,繼承自 GCF Connection 介面,編程模式與 Datagram 高度一致。
ServerSocketConnection scn = (ServerSocketConnection) Connector.open("socket://:5009"); 監聽埠 5009。SocketConnection sc = (SocketConnection) scn.acceptAndOpen(); 阻塞等待客戶端,返回連線專用 Socket。DELAY=0 (Nagle 關閉)、LINGER=0、KEEPALIVE、緩衝區大小。DataInputStream is = sc.openDataInputStream();、DataOutputStream os = sc.openDataOutputStream();String msg = is.readUTF(); os.writeUTF(msg); (回聲伺服器)。SocketConnection sc = (SocketConnection) Connector.open("socket://host:5009");LINGER=5)。InputStream/OutputStream (或 Data 版本)。// 主 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) { /* 提示先啟動伺服器 */ }
}
}
finally 或 destroyApp 保證釋放。ConnectionNotFoundException (伺服器未啟動)、IOException (斷線/超時)、一般 Exception。ssl://)、雙向認證、資料加密。