GCF 提供 DatagramConnection、Datagram 支援 UDP 開發。MIDP 2.0 新增 UDPDatagramConnection (含 getLocalAddress/getLocalPort)。UDP 不可靠,需可靠傳輸請用 Socket (TCP)。注意:除 HTTP 外,其他連接協定非 MIDP 強制實作,使用前必查裝置文件。
datagram://host:port (如 datagram://localhost:5555)datagram://:port (本地監聽指定埠)public class Sender extends Thread {
private DatagramConnection dc;
private String address, message;
public Sender(DatagramConnection dc) { this.dc = dc; start(); }
public synchronized void send(String addr, String msg) {
address = addr; message = msg; notify();
}
public void run() {
while (true) {
synchronized (this) {
if (message == null) { try { wait(); } catch (InterruptedException ignored) {} }
}
try {
byte[] bytes = message.getBytes();
Datagram dg = (address == null) ?
dc.newDatagram(bytes, bytes.length) :
dc.newDatagram(bytes, bytes.length, address);
dc.send(dg);
} catch (Exception e) { e.printStackTrace(); }
message = null;
}
}
}
public class Server implements Runnable, CommandListener {
private DatagramMIDlet parent;
private Display display;
private Form form;
private StringItem status;
private TextField input;
private Command sendCmd;
private Sender sender;
private String clientAddr;
public Server(DatagramMIDlet m) { /* UI 初始化 */ }
public void start() { new Thread(this).start(); }
public void run() {
try {
status.setText("Waiting for connection");
DatagramConnection dc = (DatagramConnection) Connector.open("datagram://:5555");
sender = new Sender(dc);
while (true) {
Datagram dg = dc.newDatagram(100);
dc.receive(dg);
clientAddr = dg.getAddress();
status.setText("Received: " + new String(dg.getData(), 0, dg.getLength()));
}
} catch (IOException e) { /* 埠佔用提示 */ }
}
public void commandAction(Command c, Displayable s) {
if (c == sendCmd && !parent.isPaused()) {
if (clientAddr == null) status.setText("No destination");
else sender.send(clientAddr, input.getString());
}
}
}
public class Client implements Runnable, CommandListener {
private DatagramMIDlet parent;
private Display display;
private Form form;
private StringItem status;
private TextField input;
private Command sendCmd;
private DatagramConnection dc;
public Client(DatagramMIDlet m) { /* UI 初始化 */ }
public void start() {
try {
dc = (DatagramConnection) Connector.open("datagram://localhost:5555");
new Thread(this).start();
} catch (IOException e) { /* 錯誤處理 */ }
}
public void run() {
while (true) {
try {
Datagram dg = dc.newDatagram(100);
dc.receive(dg);
status.setText("Server: " + new String(dg.getData(), 0, dg.getLength()));
} catch (IOException e) { break; }
}
}
public void commandAction(Command c, Displayable s) {
if (c == sendCmd) {
try {
byte[] bytes = input.getString().getBytes();
Datagram dg = dc.newDatagram(bytes, bytes.length);
dc.send(dg);
} catch (IOException e) { status.setText("Send failed"); }
}
}
}