0

ソケットがアクティブなままで、プログラムの読み取りを続行できるように、SocketTimeoutException をキャッチしようとしています。残念ながら、どのように読み取りタイムアウトをキャッチしようとしてもできないため、アプリケーションが閉じます。

ソケットがあり、タイムアウトを 30000 に設定しています。

input.readLine() を呼び出し、タイムアウトをキャッチして続行したい。どんな助けでも大歓迎です。

String response;
try {
        response = input.readLine();
        System.out.println("Server Response: " + response);
        return;
} catch(AssertionError e){
    //we timed out. print to user that timeout occured,
    //try command again
    System.out.println("TIMEOUT: Please try your command again.\n"
        + "If you created a game, join an existing or create again.");
} catch (SocketTimeoutException e) {
    //we timed out. print to user that timeout occured,
    //try command again
    System.out.println("TIMEOUT: Please try your command again.\n"
        + "If you created a game, join an existing or create again.");
} catch (IOException ex) {
//do nothing
}

出力は次のとおりです。

java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at Client.main(Client.java:97)
4

1 に答える 1

0

これは実際のコードではないか、独自の SocketTimeoutException クラスをどこかに持っているか、間違ったものをインポートしたかのいずれかです。catch IOException ブロックに便利なものを入れることをお勧めします。あなたは驚きを得るかもしれません。

AssertionError をキャッチしてタイムアウトとして扱う理由は、私には謎です。

于 2014-06-01T02:02:30.017 に答える