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

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

本文简介:

作者:mingjava   文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=133

在J2ME中基于UDP协议编程一文中介绍了如何使用Datagram和DatagramConnection来开发应用程序,本文将主要讲述在MIDP2.0中使用ServerSocketConnection和SocketConnection来开发联网应用程序。TCP协议是可以保证传输的质量的,这也是他和UDP的一大区别。由于以上谈到的四个类都属于GCF,他们在程序编写方面也非常相似,通常我们在Server端的某个端口监听,当客户端连接服务器的时候,则可以得到一个SocketConnection的实例。通过两端的SocketConnection则可以实现C/S结构的通信了。

    首先看一下,ServerSocketConnection类,它的一个非常重要的方法就是acceptAndOpen()方法,这个方法返回一个SocketConnection实例,从而使得客户端和服务器端可以通过socket通信了。典型的代码如下:

// Create the server listening socket for port 1234
   ServerSocketConnection scn = (ServerSocketConnection)
                            Connector.open("socket://:1234");

   // Wait for a connection.
   SocketConnection sc = (SocketConnection) scn.acceptAndOpen();

   // Set application specific hints on the socket.
   sc.setSocketOption(DELAY, 0);
   sc.setSocketOption(LINGER, 0);
   sc.setSocketOption(KEEPALIVE, 0);
   sc.setSocketOption(RCVBUF, 128);
   sc.setSocketOption(SNDBUF, 128);

   // Get the input stream of the connection.
   DataInputStream is = sc.openDataInputStream();

   // Get the output stream of the connection.
   DataOutputStream os = sc.openDataOutputStream();

   // Read the input data.
   String result = is.readUTF();

   // Echo the data back to the sender.
   os.writeUTF(result);

   // Close everything.
   is.close();
   os.close();
   sc.close();
   scn.close();
   ..
   

    SocketConnection的使用也是非常简单,通过Connector的open方法我们可以得到一个SocketConnection的实例。
   SocketConnection sc = (SocketConnection)
                         Connector.open("socket://host.com:79");
   sc.setSocketOption(SocketConnection.LINGER, 5);

   InputStream is  = sc.openInputStream();
   OutputStream os = sc.openOutputStream();

   os.write("\r\n".getBytes());
   int ch = 0;
   while(ch != -1) {
       ch = is.read();
   }

   is.close();
   os.close();
   sc.close();
 其实我们在用socket编写程序的时候无非遵循这样的一种规则:服务器端建立监听端口等待连接,客户端通过open()方法与服务器端建立连接,两端通过建立的socket传输数据,关闭连接。

    下图是我在运行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;
 }

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

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

go top