日期:2014-05-20  浏览次数:20834 次

采用socket连接J2ME的客户端和J2SE的服务端
运行后显示连接可以连接上,但不能够相互发送数据,请各位帮忙看看是怎么回事。
客户端的程序如下:

import   javax.microedition.midlet.*;
import   javax.microedition.io.*;
import   javax.microedition.lcdui.*;

import   java.io.*;

public   class   ScoketClient   extends   MIDlet   implements   Runnable,   CommandListener   {

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;

public   ScoketClient()   {
display   =   Display.getDisplay(this);
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);

Thread   t   =   new   Thread(this);
t.start();
}


protected   void   startApp()   {
//   TODO   自动生成方法存根

}

protected   void   pauseApp()   {
//   TODO   自动生成方法存根

}


protected   void   destroyApp(boolean   arg0)   {
//   TODO   自动生成方法存根

}

public   void   run()   {

try   {
sc   =   (SocketConnection)   Connector.open( "socket://localhost:5000 ");
si.setText( "Connected   to   server ");
is   =   sc.openInputStream();
os   =   sc.openOutputStream();

//   Start   the   thread   for   sending   messages   -   see   Sender 's   main
//   comment   for   explanation

//   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)   {