Timer Server
import java.io.InterruptedIOException;import javax.microedition.io.Connector;import javax.microedition.io.Datagram;import javax.microedition.io.DatagramConnection;import javax.microedition.lcdui.Alert;import javax.microedition.lcdui.AlertType;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Form;import javax.microedition.lcdui.StringItem;import javax.microedition.lcdui.TextField;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class TimeMIDlet extends MIDlet implements CommandListener, Runnable { private Display display; private Form addressForm; private Form connectForm; private Form displayForm; private Command backCommand; private Command exitCommand; private Command okCommand; private StringItem messageLabel; private TextField serverName; protected void startApp() throws MIDletStateChangeException { if (display == null) { initialize(); display.setCurrent(addressForm); } } protected void pauseApp() { } protected void destroyApp(boolean unconditional) throws MIDletStateChangeException { } public void commandAction(Command cmd, Displayable d) { if (cmd == okCommand) { Thread t = new Thread(this); t.start(); } else if (cmd == backCommand) { display.setCurrent(addressForm); } else if (cmd == exitCommand) { try { destroyApp(true); } catch (MIDletStateChangeException ex) { } notifyDestroyed(); } } public void run() { DatagramConnection conn = null; display.setCurrent(connectForm); try { // Build the name string for the Connector open method String server = serverName.getString(); String name = “datagram://” + server + “:” + 13; conn = (DatagramConnection)Connector.open(name, Connector.READ_WRITE, false); // Build and send an empty datagram Datagram dg = conn.newDatagram(10); dg.setData(“Hello”.getBytes(), 0, 5); conn.send(dg); // Receive the reply Datagram rdg = conn.newDatagram(512); conn.receive(rdg); messageLabel.setText(new String(rdg.getData(), 0, rdg.getLength())); display.setCurrent(displayForm); } catch (InterruptedIOException iex) { display.callSerially(new Runnable() { public void run() { Alert alert = new Alert(“No Reply”, “No reply was received.\n” + “Please check the server address and try again.”, null, AlertType.ERROR); alert.setTimeout(Alert.FOREVER); display.setCurrent(alert, addressForm); } }); return; } catch (Exception ex) { display.callSerially(new Runnable() { public void run() { Alert alert = new Alert(“Invalid Address”, “The supplied address is invalid\n” + “Please correct it and try again.”, null, AlertType.ERROR); alert.setTimeout(Alert.FOREVER); display.setCurrent(alert, addressForm); } }); return; } catch (Error err) { System.out.println(err); err.printStackTrace(); } } private void initialize() { display = Display.getDisplay(this); // Commands exitCommand = new Command(“Exit”, Command.EXIT, 0); okCommand = new Command(“OK”, Command.OK, 0); backCommand = new Command(“Back”, Command.BACK, 0); // The address form addressForm = new Form(“Network Time”); serverName = new TextField(“Time Server name:”, “tock.usno.navy.mil”, 256, TextField.ANY); addressForm.append(serverName); addressForm.addCommand(okCommand); addressForm.addCommand(exitCommand); addressForm.setCommandListener(this); // The connect form connectForm = new Form(“Sending”); messageLabel = new StringItem(null, “Sending the datagram…\nPlease wait.”); connectForm.append(messageLabel); connectForm.addCommand(backCommand); connectForm.setCommandListener(this); // The display form displayForm = new Form(“Server Reply”); messageLabel = new StringItem(null, null); displayForm.append(messageLabel); displayForm.addCommand(backCommand); displayForm.setCommandListener(this); }}