サーバーがクライアントにデータを送信し、クライアントがデータを返すサーバー/クライアントアプリケーションを作成しようとしています。しかし、何らかの理由で、データを書き込まずに非正常な切断を検出する方法を知っていないので、私はそれを動作させることができません(バッファは不必要なデータで満たされるのでデータを書き込めません)。それを行う別の方法がありますか?私はTCPを使用しています。Cでの非gracefull切断を検出する
答えて
信頼性の低いネットワーク上のTCP接続の動作について説明します。したがって、他のプロトコルを使用する必要があります。私は問題を完全に理解していない
信頼できるネットワークですが、サーバーが切断された場合は、すべてのクライアントを手動で再接続したくありません。 –
あなたはどのプロトコルを使用していますか? –
申し訳ありませんが私はあなたの答えを誤解しました。私は既にTCPを使用しています。 –
を見て、しかし、あなたはあなたのソケットがまだ接続されているかどうかを確認できます。
public bool IsSocketConnected(Socket socket) {
return !(socket.Poll(0, SelectMode.SelectRead) && socket.Available == 0) && socket.Connected;
}
ありがとうございます。これは優雅な切断のために機能します。しかし、非優雅な切断のためではありません。 (サーバーネットワークがランダムに切断されたとき) –
タイムアウト(この例のように「0」以外)を選択することは、実用的な解決策になる可能性があります。切断が偶然起こった場合、「生き残っている」側は、状態を変更するためのワードを受け取る(切断された側からそのワードが来なければならない)ことができないか、タイムアウトメカニズムが導入されています。 – kasperhj
私はキープアライブとそれを修正しました関数。
- 1. QSqlDatabase切断検出
- 2. ASP.NET MVCで非同期クライアントの切断を検出
- 3. Cでソケット切断を検出する方法
- 4. PHP - リモートホストの切断を検出する
- 5. オーディオデバイスの到着/切断の検出
- 6. Javaソケット - 入力ストリームなしでネットワーク切断を検出する
- 7. TCP接続の切断を検出する方法は?
- 8. java httpclientサーバの切断を検出する
- 9. winsock2の異常切断を検出する方法は?
- 10. PHPクライアントからフラッシュクライアントの切断を検出する方法は?
- 11. Android 2.1 Bluetoothオーディオの接続/切断を検出する
- 12. node.js httpサーバ、クライアントの切断時に検出する
- 13. AndroidはすぐにBluetoothの切断を検出します
- 14. Webサービスでのクライアントの切断の検出
- 15. gevent内でのクライアントの切断の検出
- 16. ソケットの切断を検出していますか?
- 17. 物理的に切断されているUSBシリアルアダプタの検出
- 18. Socket.ioは切断理由を検出します
- 19. Fayeさんとのチャンネルで切断イベントを検出する方法
- 20. WiFiアクセスポイントからの切断を検出しました
- 21. Javaが接続の切断を検出しました
- 22. 出力をパイプに切断する
- 23. Python SocketServer.TCPServerでクライアント切断を検出する方法はありますか?
- 24. アイドルソケット/クライアントを切断するC
- 25. USBデバイスの接続/切断時の検出方法は?
- 26. Socket.io再接続するか完全に切断するかを検出する
- 27. Arduinoイーサネットシールドが切断を検出しない
- 28. 予期しないソケット切断の検出
- 29. Windows側のサーバー側からRPC接続の切断を検出する
- 30. SignalRの切断がインターネットの切断/再接続で呼び出されない
TCPは接続停止を正常に処理するように設計されています。消滅した接続から回復するTCPの機能は機能であり、バグではありません。別の言い方をすると、通信が行われていない場合、切断されていないことです。もう一方の側がまだ生きているかどうかを知る必要があるときのこれまでの解決方法は、プロトコルに定期的なハートビートを組み込むことです。そのような操作がない場合、ゼロバイト書き込みを使用することがありますが、これは完全には信頼できません。 –