J2ME中使用socket开发联网程序[2]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

 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);
  }
 }

本文关键:J2ME中使用socket开发联网程序
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top