J2ME Java Tutorial

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.Reader;
import javax.microedition.io.Connector;
import javax.microedition.io.ServerSocketConnection;
import javax.microedition.io.SocketConnection;
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.midlet.MIDlet;
public class PatchyMIDlet extends MIDlet implements CommandListener, Runnable {
  private Display mDisplay;
  private Form mForm = new Form("PatchyMIDlet");
  private ServerSocketConnection mServerSocketConnection;
  private boolean mTrucking = true;
  public void startApp() {
    mDisplay = Display.getDisplay(this);
    mForm.addCommand(new Command("Exit", Command.EXIT, 0));
    mForm.setCommandListener(this);
    Thread t = new Thread(this);
    t.start();
    mDisplay.setCurrent(mForm);
  }
  public void pauseApp() {
  }
  public void destroyApp(boolean unconditional) {
    shutdown();
  }
  private void shutdown() {
    mTrucking = false;
    try {
      mServerSocketConnection.close();
    } catch (IOException ioe) {
    }
  }
  public void commandAction(Command c, Displayable s) {
    if (c.getCommandType() == Command.EXIT) {
      shutdown();
      notifyDestroyed();
    }
  }
  public void run() {
    try {
      mServerSocketConnection = (ServerSocketConnection) Connector.open("socket://:80");
      SocketConnection sc = null;
      while (mTrucking) {
        sc = (SocketConnection) mServerSocketConnection.acceptAndOpen();
        Reader in = new InputStreamReader(sc.openInputStream());
        PrintStream out = new PrintStream(sc.openOutputStream());
        out.print("HTTP/1.1 200 OK\r\n\r\n");
        out.print("Message");
        out.close();
        in.close();
        sc.close();
      }
    } catch (Exception e) {
      
    }
  }
}