FileDocCategorySizeDatePackage
SocketMIDlet.javaAPI DocExample5896Sun Nov 04 15:21:16 GMT 2001ora.ch6

SocketMIDlet

public class SocketMIDlet extends javax.microedition.midlet.MIDlet implements javax.microedition.lcdui.CommandListener, Runnable

Fields Summary
private javax.microedition.lcdui.Display
display
private javax.microedition.lcdui.Form
addressForm
private javax.microedition.lcdui.Form
connectForm
private javax.microedition.lcdui.Form
displayForm
private javax.microedition.lcdui.TextField
serverName
private javax.microedition.lcdui.TextField
serverPort
private javax.microedition.lcdui.StringItem
messageLabel
private javax.microedition.lcdui.StringItem
errorLabel
private javax.microedition.lcdui.Command
okCommand
private javax.microedition.lcdui.Command
exitCommand
private javax.microedition.lcdui.Command
backCommand
Constructors Summary
Methods Summary
public voidcommandAction(javax.microedition.lcdui.Command cmd, javax.microedition.lcdui.Displayable d)

        if (cmd == okCommand) {
            Thread t = new Thread(this);
            t.start();
            display.setCurrent(connectForm);
        } else if (cmd == backCommand) {
            display.setCurrent(addressForm);
        } else if (cmd == exitCommand) {
            try {
                destroyApp(true);
            } catch (MIDletStateChangeException ex) {
            }
            notifyDestroyed();
        }
    
protected voiddestroyApp(boolean unconditional)

    
private voidinitialize()

        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("Socket Client");
        serverName = new TextField("Server name:", "", 256, TextField.ANY);
        serverPort = new TextField("Server port:", "", 8, TextField.NUMERIC);
        addressForm.append(serverName);
        addressForm.append(serverPort);
        addressForm.addCommand(okCommand);
        addressForm.addCommand(exitCommand);
        addressForm.setCommandListener(this);

        // The connect form
        connectForm = new Form("Connecting");
        messageLabel = new StringItem(null, "Connecting...\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);
    
protected voidpauseApp()

    
public voidrun()

        InputStream is = null;
        OutputStream os = null;
        StreamConnection socket = null;

        try {
            String server = serverName.getString();
            String port = serverPort.getString();
            String name = "socket://" + server + ":" + port;
            socket = (StreamConnection)Connector.open(name, Connector.READ_WRITE);
        } catch (Exception ex) {
            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;
        }

        try {
            // Send a message to the server
            String request = "GET / HTTP/1.0\n\n";

            os = socket.openOutputStream();
            os.write(request.getBytes());
            os.close();

            // Read the server's reply, up to a maximum
            // of 128 bytes.
            is = socket.openInputStream();
            final int MAX_LENGTH = 128;
            byte[] buf = new byte[MAX_LENGTH];
            int total = 0;
            while (total < MAX_LENGTH) {
                int count = is.read(buf, total, MAX_LENGTH - total);
                if (count < 0) {
                    break;
                }
                total += count;
            }
            is.close();
            String reply = new String(buf, 0, total);
            messageLabel.setText(reply);
            socket.close();
            display.setCurrent(displayForm);
        } catch (IOException ex) {
            Alert alert = new Alert("I/O Error",
                        "An error occurred while communicating with the server.",
                        null, AlertType.ERROR);
            alert.setTimeout(Alert.FOREVER);
            display.setCurrent(alert, addressForm);
            return;
        } finally {
            // Close open streams and the socket
            try {
                if (is != null) {
                    is.close();
                    is = null;
                }
            } catch (IOException ex1) {
            }
            try {
                if (os != null) {
                    os.close();
                    os = null;
                }
            } catch (IOException ex1) {
            }
            try {
                if (socket != null) {
                    socket.close();
                    socket = null;
                }
            } catch (IOException ex1) {
            }
        }
    
protected voidstartApp()

        if (display == null) {
            initialize();
            display.setCurrent(addressForm);
        }