亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

J2ME中使用Socket開發聯網程序

2019-11-17 06:26:36
字體:
來源:轉載
供稿:網友

  在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的時候的截圖!代碼也一并發表出來。

J2ME中使用Socket開發聯網程序

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
*/



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最近2019中文免费高清视频观看www99| 国产精品欧美一区二区| 国产亚洲精品久久久久久牛牛| 日韩中文在线中文网在线观看| 久久久久国产精品免费| 18久久久久久| 日本成人在线视频网址| 国产美女久久精品香蕉69| 欧美高清视频一区二区| 国产免费一区二区三区在线能观看| 羞羞色国产精品| 一区二区三区视频免费| 91av网站在线播放| 免费91麻豆精品国产自产在线观看| 久久久午夜视频| 欧美激情国内偷拍| 午夜免费在线观看精品视频| 亚洲欧洲成视频免费观看| 久久免费观看视频| 国产精品国产亚洲伊人久久| 91精品国产91久久久久久久久| 日韩av在线天堂网| 性色av一区二区三区免费| 国产成人在线视频| 亚洲国产一区自拍| 中文字幕欧美日韩精品| 久久综合伊人77777| 亚洲精品99久久久久| 欧洲日韩成人av| 亚洲欧美日韩另类| 亚洲影院色在线观看免费| 在线视频免费一区二区| 91成人性视频| 在线亚洲欧美视频| 精品久久久久久国产| 久久久国产一区| 国产日韩欧美另类| 亚洲激情国产精品| 欧美麻豆久久久久久中文| 国产精品大片wwwwww| 色婷婷av一区二区三区久久| 欧美日韩国产一区二区三区| 欧美激情第三页| 97在线精品视频| 欧美激情精品久久久久久大尺度| 国产精品久久精品| 国产日韩欧美综合| 欧美一级成年大片在线观看| 久久久精品一区二区三区| 欧美最猛性xxxxx亚洲精品| 欧美精品www在线观看| 日韩av影视综合网| 国产成人精品一区二区三区| 97在线视频免费| 国产精品视频yy9099| 超碰日本道色综合久久综合| 日韩中文综合网| 97精品久久久| 中文字幕日韩综合av| 国产经典一区二区| 91精品国产综合久久香蕉| 久久久久久久激情视频| 亚洲成av人影院在线观看| 亚洲激情小视频| 日韩av在线网页| 久久色在线播放| 国产成人a亚洲精品| 欧美视频中文在线看| 亚洲二区中文字幕| 欧美午夜视频一区二区| 97香蕉超级碰碰久久免费的优势| 国产69精品久久久久久| 欧美夫妻性生活视频| 不卡在线观看电视剧完整版| 久久免费精品视频| 精品国产欧美一区二区五十路| 亚洲 日韩 国产第一| 国产精品扒开腿做爽爽爽的视频| 中文字幕视频一区二区在线有码| 精品中文字幕在线2019| 国产日韩欧美综合| 最近2019中文字幕第三页视频| 深夜福利一区二区| 精品亚洲一区二区三区在线播放| 欧美国产中文字幕| 国产精品91视频| 久久精品视频导航| 国产精品精品久久久| 欧美一级片在线播放| 国产小视频国产精品| 国语自产精品视频在线看| 亚洲欧美在线看| 国产欧美日韩精品丝袜高跟鞋| 一区二区三区回区在观看免费视频| 欧美寡妇偷汉性猛交| 欧美精品久久久久| 96国产粉嫩美女| 亚洲香蕉成视频在线观看| 91精品国产91久久久久久不卡| 欧美极品少妇xxxxⅹ裸体艺术| 在线观看欧美日韩| 久久国产精品久久精品| 久久国产视频网站| 日韩影视在线观看| 97精品国产97久久久久久| 米奇精品一区二区三区在线观看| 国产日韩欧美在线视频观看| 国产精品视频区1| 国产成人啪精品视频免费网| 成人羞羞国产免费| 国模精品系列视频| 欧美夫妻性视频| 最近2019中文字幕一页二页| 国色天香2019中文字幕在线观看| 国产精品va在线播放我和闺蜜| 国模吧一区二区三区| 午夜精品久久久久久99热软件| 亚洲人成在线观看网站高清| 久久99青青精品免费观看| 成人h视频在线观看播放| 国产精品久久9| 日韩精品极品在线观看| 日韩精品小视频| 日韩最新在线视频| 亚洲国产天堂网精品网站| 亚洲一区二区久久久久久久| 91精品久久久久久久久久另类| 一本色道久久综合狠狠躁篇的优点| 精品国产自在精品国产浪潮| 26uuu日韩精品一区二区| 国产区精品在线观看| 欧美黑人性猛交| 色婷婷av一区二区三区久久| 欧美一级大片在线观看| 亚洲美女性生活视频| 亚洲3p在线观看| 一本色道久久综合狠狠躁篇的优点| 蜜月aⅴ免费一区二区三区| 高清欧美一区二区三区| 亚洲乱码一区av黑人高潮| 激情亚洲一区二区三区四区| 精品视频在线播放| 国产精品视频专区| 亚洲人午夜精品免费| 亚洲成年人影院在线| 色婷婷av一区二区三区在线观看| 国产精品影院在线观看| 欧美激情视频三区| 国产成人精品国内自产拍免费看| 国产精品视频在线播放| 亚洲视频999| 欧美自拍视频在线| 国产成人精品优优av| 亚洲美女免费精品视频在线观看| 国产suv精品一区二区| 亚洲成人久久一区| 久久国产精品亚洲| 91精品久久久久久久久久久久久久| 中文字幕一区二区三区电影| 日韩欧美在线视频日韩欧美在线视频| www.久久草.com| 欧美激情女人20p| 亚洲精品福利在线| 欧美日韩国产第一页|