| package socket; import javax.microedition.midlet.*;import javax.microedition.io.*;
 import javax.microedition.lcdui.*;
 import java.io.*;
 public class SocketMIDlet extends MIDlet implements CommandListener {private static final String SERVER = "Server";
 private static final String CLIENT = "Client";
 private static final String[] names = { SERVER, CLIENT };
 private static Display display;
 private Form f;
 private ChoiceGroup cg;
 private boolean isPaused;
 private Server server;
 private Client client;
 private Command exitCommand = new Command("Exit", Command.EXIT, 1);
 private Command startCommand = new Command("Start", Command.ITEM, 1);
  public SocketMIDlet() {display = Display.getDisplay(this);
 f = new Form("Socket Demo");
 cg = new ChoiceGroup("Please select peer", Choice.EXCLUSIVE, names,null);
 f.append(cg);
   f.addCommand(exitCommand);f.addCommand(startCommand);
 f.setCommandListener(this);
   display.setCurrent(f);}
  public boolean isPaused() {return isPaused;
 }
  public void startApp() {isPaused = false;
 }
  public void pauseApp() {isPaused = true;
 }
  public void destroyApp(boolean unconditional) {if (server != null) {
 server.stop();
 }
 if (client != null) {
 client.stop();
 }
 }
  public void commandAction(Command c, Displayable s) {if (c == exitCommand) {
 destroyApp(true);
 notifyDestroyed();
 } else if (c == startCommand) {
 String name = cg.getString(cg.getSelectedIndex());
 if (name.equals(SERVER)) {
 server = new Server(this);
 server.start();
 } else {
 client = new Client(this);
 client.start();
 }
 }
 }
 } package socket; import javax.microedition.midlet.*;import javax.microedition.io.*;
 import javax.microedition.lcdui.*;
 import java.io.*;
 public class Server implements Runnable, CommandListener {private SocketMIDlet parent;
 private Display display;
 private Form f;
 private StringItem si;
 private TextField tf;
 private boolean stop;
 private Command sendCommand = new Command("Send", Command.ITEM, 1);
 private Command exitCommand = new Command("Exit", Command.EXIT, 1);
 InputStream is;
 OutputStream os;
 SocketConnection sc;
 ServerSocketConnection scn;
 Sender sender;
 
 public Server(SocketMIDlet m) {
 parent = m;
 display = Display.getDisplay(parent);
 f = new Form("Socket Server");
 si = new StringItem("Status:", " ");
 tf = new TextField("Send:", "", 30, TextField.ANY);
 f.append(si);
 f.append(tf);
 f.addCommand(exitCommand);
 f.setCommandListener(this);
 display.setCurrent(f);
 }
  public void start() {Thread t = new Thread(this);
 t.start();
 }
  public void run() {try {
 si.setText("Waiting for connection");
 scn = (ServerSocketConnection) Connector.open("socket://:5009");
    // Wait for a connection.sc = (SocketConnection) scn.acceptAndOpen();
 si.setText("Connection accepted");
 is = sc.openInputStream();
 os = sc.openOutputStream();
 sender = new Sender(os);
 
 // Allow sending of messages only after Sender is created
 f.addCommand(sendCommand);
    while (true) {StringBuffer sb = new StringBuffer();
 int c = 0;
     while (((c = is.read()) != ‘\n’) && (c != -1)) {sb.append((char) c);
 }
     if (c == -1) {break;
 }
 si.setText("Message received – " + sb.toString());
 }
 stop();
 si.setText("Connection is closed");
 f.removeCommand(sendCommand);
 } catch (IOException ioe) {
 if (ioe.getMessage().equals("ServerSocket Open")) {
 Alert a = new Alert("Server", "Port 5000 is already taken.",null, AlertType.ERROR);
 a.setTimeout(Alert.FOREVER);
 a.setCommandListener(this);
 display.setCurrent(a);
 } else {
 if (!stop) {
 ioe.printStackTrace();
 }
 }
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
  public void commandAction(Command c, Displayable s) {if (c == sendCommand && !parent.isPaused()) {
 sender.send(tf.getString());
 }
   if ((c == Alert.DISMISS_COMMAND) || (c == exitCommand)) {parent.notifyDestroyed();
 parent.destroyApp(true);
 }
 }
 /*** Close all open streams
 */
  public void stop() {try {
 stop = true;
    if (is != null) {is.close();
 }
    if (os != null) {os.close();
 }
    if (sc != null) {sc.close();
 }
    if (scn != null) {scn.close();
 }
 } catch (IOException ioe) {
 }
 }
 }
 package socket; import javax.microedition.midlet.*;import javax.microedition.io.*;
 import javax.microedition.lcdui.*;
 import java.io.*;
 public class Client implements Runnable, CommandListener {private SocketMIDlet parent;
 private Display display;
 private Form f;
 private StringItem si;
 private TextField tf;
 private boolean stop;
 private Command sendCommand = new Command("Send", Command.ITEM, 1);
 private Command exitCommand = new Command("Exit", Command.EXIT, 1);
  InputStream is;OutputStream os;
 SocketConnection sc;
 Sender sender;
  public Client(SocketMIDlet m) {parent = m;
 display = Display.getDisplay(parent);
 f = new Form("Socket Client");
 si = new StringItem("Status:", " ");
 tf = new TextField("Send:", "", 30, TextField.ANY);
 f.append(si);
 f.append(tf);
 f.addCommand(exitCommand);
 f.addCommand(sendCommand);
 f.setCommandListener(this);
 display.setCurrent(f);
 }
  /*** Start the client thread
 */
 public void start() {
 Thread t = new Thread(this);
 t.start();
 }
  public void run() {try {
 sc = (SocketConnection) Connector.open("socket://localhost:5009");
 si.setText("Connected to server");
 is = sc.openInputStream();
 os = sc.openOutputStream();
    // Start the thread for sending messages – see Sender’s main// comment for explanation
 sender = new Sender(os);
 
 // Loop forever, receiving data
 while (true) {
 StringBuffer sb = new StringBuffer();
 int c = 0;
 while (((c = is.read()) != ‘\n’) && (c != -1)) {
 sb.append((char) c);
 }
     if (c == -1) {break;
 }
 // Display message to user
 si.setText("Message received – " + sb.toString());
 }
 stop();
 si.setText("Connection closed");
 f.removeCommand(sendCommand);
 } catch (ConnectionNotFoundException cnfe) {
 Alert a = new Alert("Client", "Please run Server MIDlet first",null, AlertType.ERROR);
 a.setTimeout(Alert.FOREVER);
 a.setCommandListener(this);
 display.setCurrent(a);
 } catch (IOException ioe) {
 if (!stop) {
 ioe.printStackTrace();
 }
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
 public void commandAction(Command c, Displayable s) {if (c == sendCommand && !parent.isPaused()) {
 sender.send(tf.getString());
 }
  if ((c == Alert.DISMISS_COMMAND) || (c == exitCommand)) {parent.notifyDestroyed();
 parent.destroyApp(true);
 }
 }
 /*** Close all open streams
 */
 public void stop() {try {
 stop = true;
 
 if (sender != null) {
 sender.stop();
 }
   if (is != null) {is.close();
 }
   if (os != null) {os.close();
 }
   if (sc != null) {sc.close();
 }
 } catch (IOException ioe) {
 }
 }
 }
 package socket; import javax.microedition.midlet.*;import javax.microedition.io.*;
 import javax.microedition.lcdui.*;
 import java.io.*;
 public class Sender extends Thread {  private OutputStream os;private String message;
  public Sender(OutputStream os) {this.os = os;
 start();
 }
  public synchronized void send(String msg) {message = msg;
 notify();
 }
  public synchronized void run() {while (true) {
 // If no client to deal, wait until one connects
 if (message == null) {
 try {
 wait();
 } catch (InterruptedException e) {
 }
 }
    if (message == null) {break;
 }
    try {os.write(message.getBytes());
 os.write("\r\n".getBytes());
 } catch (IOException ioe) {
 ioe.printStackTrace();
 }
   // Completed client handling, return handler to pool and// mark for wait
 message = null;
 }
 }
 public synchronized void stop() {message = null;
 notify();
 }
 }
 |