Android客户端 - Java服务器,Socket不会抛出异常

时间:2014-03-07 19:51:18

标签: java android sockets exception


我正在尝试将我的Android APP连接到我为它制作的Java服务器上。

我有一个问题,服务器工作正常,APP连接到服务器时工作正常。

当我关闭服务器并尝试连接到它时,问题就来了。假设Socket.connect()将抛出我将捕获的异常,但不抛出此异常。

我不知道我做错了什么,我在这里粘贴我的代码供你阅读,也许somone可以帮助我。
感谢所有伙伴:D

连接属性:

static Socket s;
static DataOutputStream output;
static boolean connected;

需要连接的方法:

public void enviarDatos(int r, int g, int b){

    connect();
    if(connected){
        panel.setText(panel.getText() + "\nEnviando datos...");
        try {
            output.writeUTF(r + "," + g + "," + b);
        } catch (Exception e) {
            panel.setText("Error: " + e.getMessage());
        }
        disconnect();
    } 
}

连接和断开连接的方法有:

public void connect(){
    try {
        s = new Socket();
        int timeout = 1000;
        s.connect(new InetSocketAddress(SERVER_ADDRESS, SERVER_PORT), timeout);
        output = new DataOutputStream(s.getOutputStream());
        connected = true;
        panel.setText("Conexion exitosa.");

    } catch (Exception e) {
        connected = false;
        panel.setText("Error: " + e.getMessage());
    }
}

public void disconnect(){
    try{
        output.close();
        s.close();
        connected = false;
    } catch(Exception e){
        panel.setText("Error: " + e.getMessage());
    }
}

2 个答案:

答案 0 :(得分:0)

第一个connect()方法与您在大型代码块中发布的方法不同,在大型代码块中您提供了两种方法。目前还不清楚你正在使用哪一个连接。尝试将int timeout参数添加到connect(),如下所示:

int timeout = 1000; // 1s timeout
s.connect(new InetSocketAddress(SERVER_ADDRESS, SERVER_PORT), timeout);

这应该使connect在超时到期后抛出IOException

希望这能解决你的问题。

答案 1 :(得分:-1)

我在“断开连接”中看到了一个潜在的问题。我认为你在输出流仍然打开时试图关闭套接字。在这种情况下,插座可能无法正常关闭,这可能会导致重新打开问题。虽然你应该看到在关闭期间抛出异常。

在disconnect()中,你可以在关闭套接字之前先尝试关闭输出吗?

public void disconnect(){
    try{
        output.close();
        s.close();
        connected = false;
    } catch(Exception e){
        panel.setText("Error: " + e.getMessage());
    }
}

我没有这个问题的背景,但这是我看到的一个潜在问题。希望它有所帮助。