J2ME套接字连接

时间:2017-06-02 13:33:35

标签: sockets java-me

我正在尝试在我的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”异常

0 个答案:

没有答案