1

現在、Java でソケットを使用しています。に接続するリスナーを作成しましたServerSocket。これは完全に正常に機能します。ただし、アプリケーションが予期しない終了に遭遇する可能性がある場合、ソケットは適切に閉じられません。SocketException: socket closed次の実行時に、これはonをスローしますsocket = serversocket.accept();

ただし、 でテストしserversocket.isBound()たところ、serversocketが実際にはバインドされているため、閉じられていないことがわかりました。接続を受け入れることができるかどうかを判断し、そうでない場合はソケットをクリアして受け入れられるかどうかを判断する方法はありますか?

前もって感謝します。

4

1 に答える 1

1

ただし、アプリケーションが予期しない終了に遭遇する可能性がある場合、ソケットは適切に閉じられません。次回の実行時に、これにより SocketException: socket closed on socket = serversocket.accept(); がスローされます。

あなたはそれを前後に持っています。「Socket closed」は、ソケット閉じられたことを意味し、閉じられていないことを意味します。

ただし、serversocket.isBound() でテストしたところ、serversocket が実際にはバインドされているため、閉じられていないことがわかりました。

違う。isBound() は、明示的または暗黙的に bind() を呼び出したことがあるかどうかを示します。ソケットを閉じた後に返されるものは変わりません。ソケットがまだ開いているかどうかを知りたい場合は、isOpen() または isClosed() のいずれかを試してください。

例外が伝えていることを信じる必要があります。サーバーソケットを閉じたので、そこから受け入れることができません。

接続を受け入れることができるかどうかを判断する方法はありますか? そうでない場合は、ソケットをクリアしてから受け入れることができますか?

そもそもソケットが閉じられるというバグを修正することは、より重要です。

于 2013-01-04T18:16:29.680 に答える