读书人

采用socket连接J2ME的客户端和J2SE的服

发布时间: 2012-01-02 22:40:04 作者: rapoo

采用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了!
[解决办法]
直接不给机会了,那快散分吧:)
[解决办法]
帮顶
[解决办法]
那快散分吧:)
[解决办法]
接分啊
[解决办法]
接分啊

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

读书人网 >J2ME开发

热点推荐