2

ServerSocket(Channel).accept()例外を処理するにはどうすればよいですか? この例外はクライアントの障害によってスローされる可能性がありますか? JavaDoc では、次のようにのみ述べています。

IOException - If some other I/O error occurs
4

2 に答える 2

3

ServerSocket(Channel).accept() 例外をどのように処理すればよいですか?

チャネルを閉じます。耐障害性が必要な場合は、新しいものを開いて受け入れ続けてください。

この例外はクライアントの障害によってスローされる可能性がありますか?

いいえ。

于 2013-09-23T23:58:14.017 に答える
1

どのように処理するかは完全にあなた次第であり、プログラムの流れはあなた次第です。「不明な例外が発生しました」というプログラムからのメッセージを見たことがあるでしょう。これはおそらく IOException です。データの転送から発生する可能性のある未知の他の問題です。もちろん、キャッチできる他の例外があり、発生する可能性が高く、別の方法で処理できます。

try {
    channel.accept();
} catch(NotYetBoundException e) {
    // If this channel's socket has not yet been bound
} catch(ClosedByInterruptException e) {
    // If another thread interrupts the current thread while the accept operation is in progress, thereby closing the channel and setting the current thread's interrupt status
} catch(AsynchronousCloseException e) {
    // If another thread closes this channel while the accept operation is in progress
} catch(ClosedChannelException e) {
    // If this channel is closed
} catch(SecurityException e) {
    // If a security manager has been installed and it does not permit access to the remote endpoint of the new connection
} catch(IOException e) {
    // If some other I/O error occurs
}
于 2013-09-23T16:31:29.083 に答える