我正在尝试在我的J2ME设备中实现套接字连接。但是我遇到了一些问题。
1-有时套接字连接只会挂起。我发送一个请求,服务器会得到它并回复,但客户端永远不会读取响应。
2-套接字没有超时:当连接挂起时,在我能够退出连接尝试之前,我被迫等待整个1分钟的默认超时。我已经尝试设置timedTask取消/终止执行连接的线程,但我没有成功。
有关为什么会发生这种情况的任何建议(1)以及如何正确实现j2me套接字连接的自定义超时(2)。
提前致谢,
的奥斯卡
SOCKET连接
String reply = "";
int ch;
try {
String name = "socket://" + socketIp + ":" + socketPort;
request = "request to socket";
socket = (SocketConnection)Connector.open(name, Connector.READ_WRITE, true);
os = socket.openOutputStream();
os.write(request.getBytes());
is = socket.openInputStream();
while( true) {
ch = is.read();
if(ch == -1) break;
if(ch < 0 && ch != -1){
break;
}
reply += (char) ch;
if(ch == '?'){
break;
}
}
socketReply(GlobalFunctions.Split(reply, "|"));
} catch (IOException ex){
socketError("Error: " + ex);
} catch (NullPointerException ex){
socketError("Error: " + ex);
} catch (ArrayIndexOutOfBoundsException ex){
socketError("Error: " + ex);
} catch (StringIndexOutOfBoundsException ex){
socketError("Error: " + ex);
} catch (Exception ex){
socketError("Error: " + ex);
} finally {
try {
// Close open streams and the socket
is.close();
os.close();
socket.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
定时任务(适用于自定义时间)
TimerTask timerTask = new TimerTask(){
public final void run()
{
try {
renderBack(displayIndex);
errorDialog(0);
is.close();
os.close();
socket.close();
t.interrupt(); //Thread running the whole connection process
} catch (IOException ex) {
ex.printStackTrace();
}
}
};
int timeOut = 20000;
timer = new Timer();
timer.schedule(timerTask, timeOut);
定时任务可以工作,意思是,它“执行”定时任务(至少是显示更改)但仍然会运行套接字默认超时,因为1分钟后它会抛出“TimeOut”异常