工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 移动开发 > 正文
J2ME中使用Socket开发联网程序
[文章信息]
作者:mingjava
时间:2004-12-16
出处:J2ME开发网
责任编辑:方舟
[文章导读]
在GCF中提供了DatagramConnection和Datagram两个接口,借助他们我们可以在J2ME中基于UDP协议开发联网应用程序
advertisement
热点推荐
· 真没想到VB也可以这样用之指针技术
· 禁止QQ登录的方法
· 给你的XML文件做个数字签名
· ImageReady制作“焰火”小动画
· Java加密和数字签名编程快速入门
[正文]

上一页  1 2  

  下图是我在运行WTK中NetworkDemo的时候的截图!代码也一并发表出来。


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


上一页  1 2  

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • J2ME手机游戏引擎程序结构简述
  • 在J2ME中实现基于UDP协议通讯程序
  • J2ME 2D小游戏入门之计时器
  • J2ME 2D小游戏入门之实现爆炸
  • 民营家电商排队造手机 设备商全面杀入
  • 英特尔澄清杨旭任职传闻 官方没宣布此消息
  • 国资委河北密制联通拆分方案
  • 垃圾邮件害人害企害国 清除垃圾邮件不手软
  • 中兴携手阿尔卡特 全球逐鹿CDMA
  • 用友总裁王文京:誓将ERP变成“大众消费”
  • 香港消费者委员会:数码相机最贵未必最好
  • 外电称中兴正评估西门子手机业务 或能并购
  • Advertisement