欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

J2ME中使用Socket開發聯網程序

系統 1635 0
  在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

*/

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

}

J2ME中使用Socket開發聯網程序


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 婷婷色国产偷v国产偷v小说 | 亚洲九九 | 亚洲另类自拍 | 国产视频一 | 国产精品久久久久久久免费大片 | 欧区一欧区二欧区三史无前例 | 日韩午夜精品 | 久久久久久久久久久9精品视频 | 日韩大片在线 | 欧美色综合天天久久综合精品 | 99久久精品费精品国产一区二区 | 99国精产品一区二区三区A片 | 亚洲免费在线视频 | 国产精品久久久久国产精品 | 国产三级在线视频 一区二区三区 | 99久久婷婷| www.毛片 | 五月综合激情婷婷六月色窝 | 国产精品一区二区三区四区 | 久久无码AV亚洲精品色午夜 | 涩色婷婷狠狠第四四房社区奇米 | 久久中文字幕网 | 新封神榜杨戬电影免费动画在线观看国语 | 午夜影院免费 | 日本字幕在线观看 | 成人两性高清图片视频 | 国产小视频在线高清播放 | 久久这里只有精品免费看青草 | 中文字幕亚洲一区 | 亚洲欧美日韩另类精品一区二区三区 | 网站国产| 日本污污视频在线观看 | 国产精品蜜臂在线观看 | 日本不卡免费新一二三区 | 亚洲综合一二三区 | 亚洲精品乱码 | 久草视频免费播放 | caoliushequ2017| a级黄色片视频 | se视频在线观看 | 国产日韩欧美中文 |