首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

采用socket连接J2ME的客户端和J2SE的服务端解决方法

2012-01-02 
采用socket连接J2ME的客户端和J2SE的服务端运行后显示连接可以连接上,但不能够相互发送数据,请各位帮忙看

采用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)   {


if   (!stop)   {
ioe.printStackTrace();
}
}   catch   (Exception   e)   {
e.printStackTrace();
}

}


public   void   commandAction(Command   c,   Displayable   d)   {
if   (c   ==   sendCommand)   {
try   {
os.write(tf.getString().getBytes());
os.write( "\r\n ".getBytes());
}   catch   (IOException   ioe)   {
ioe.printStackTrace();
}

}
if   (c   ==   exitCommand)   {

destroyApp(false);
notifyDestroyed();
}

}

public   void   stop()   {
try   {
stop   =   true;

if   (is   !=   null)   {
is.close();
}

if   (os   !=   null)   {
os.close();
}

if   (sc   !=   null)   {
sc.close();
}
}   catch   (IOException   ioe)   {
}
}

}

服务器端的程序如下:
import   java.net.ServerSocket;
import   java.net.Socket;
import   java.net.InetAddress;
import   java.io.IOException;
import   java.io.DataInputStream;
import   java.io.DataOutputStream;

public   class   ServerTest   implements   Runnable
{
Thread   thread;

public   void   run()
{
try
{
String   str;
//创建服务器Socket并侦听端口8888
ServerSocket   serverSocket=new   ServerSocket   (5000);
//接收客户端的连接
Socket   socket=serverSocket.accept();

DataInputStream   inStream=new   DataInputStream(socket.getInputStream());
DataOutputStream   outStream=new   DataOutputStream   (socket.getOutputStream());
InetAddress   addr=socket.getInetAddress();
System.out.println( "接收到来自   "+addr.getHostAddress()+ "   的连接 ");
//发送响应信息
outStream.writeUTF( "1 ");

while   (true)
{
//接收客户端的信息
StringBuffer   sb   =   new   StringBuffer();
int   c   =   0;
        c=inStream.readChar();
sb.append((char)c);




}
}

catch   (IOException   e)
{
System.out.println(e);
}
}

void   start   ()
{
thread=new   Thread   (this);
//线程开始
thread.start();
}

public   static   void   main(String[]   args)
{
ServerTest   app=new   ServerTest();
app.start();
}
}


[解决办法]
友情up了!
[解决办法]
直接不给机会了,那快散分吧:)
[解决办法]
帮顶
[解决办法]
那快散分吧:)
[解决办法]
接分啊
[解决办法]
接分啊

[解决办法]
怎么解决的?贴出来让大家学习学习也好啊

热点排行