Java TCPソケットがであるかどうかを調べようとしていますが、現在接続されているかどうかではなく、ソケットが接続されているかどうかがわかります。ソケットが現在Javaで接続されているかどうかを確認するにはどうすればよいですか?
socket.isConnected();
ありがとう、ありがとう。
Java TCPソケットがであるかどうかを調べようとしていますが、現在接続されているかどうかではなく、ソケットが接続されているかどうかがわかります。ソケットが現在Javaで接続されているかどうかを確認するにはどうすればよいですか?
socket.isConnected();
ありがとう、ありがとう。
あなたがプロトコルをある程度のレベルで制御しているとすれば、私は接続がアクティブであることを確認するためにハートビートを送信することを熱望しています。これは最も失敗のない方法であることが証明されており、接続が切断されたときに最も早く通知されることがよくあります。
TCPキープアライブは機能しますが、リモートホストの電源が突然切れた場合はどうなりますか? TCPがタイムアウトするまでに時間がかかることがあります。一方、アプリケーションにx秒ごとにハートビートの返信が必要なロジックがある場合、最初に接続を取得しないと、リモート側のネットワークまたはサーバーの問題によって接続が機能しなくなることがわかります。
詳細は、Do I need to heartbeat to keep a TCP connection open?を参照してください。
socket.isConnected()
は、クライアントが接続すると(そして接続解除後も)変わってしまいます。socket.getInputStream().read()
returns -1
を取得する場合を除き、 socket.getInetAddress().isReachable(int timeout)
から:isReachable(int timeout)
そのアドレスに到達可能かどうかをテストします。実装がホストに到達しようとするのが最善ですが、ファイアウォールとサーバーの構成によって要求がブロックされ、到達不能な状態になり、特定のポートにアクセスできる場合があります。典型的な実装では、特権を取得できる場合はICMP ECHO REQUESTを使用し、そうでない場合は宛先ホストのポート7(Echo)にTCP接続を確立しようとします。
http://stackoverflow.com/questions/969866/java-detect-lost-connection – Aziz
、別のhttp://stackoverflow.com/questions/485855/how-do-you-handle- socket-disconnecting-in-java –
アンサー[ここ](http://stackoverflow.com/a/17889321/207421)。 – EJP