Qt tcpsocket 切断ソリューションについて

1 tcpip プロトコル

言うことはあまりありませんが、送信が正確で信頼性が高く、ミッションは達成されると主張しています。このプロトコルは非常に混乱しており、実際のアプリケーションではほとんど使用されません。

2 問題

tcp プロトコルを使用してサーバーに接続した後 (Windows システムの通信モジュールと ubuntu システムのマイクロコントローラーを tcpip プロトコルでテストした)、フィードバックがタイムリーでなかったか、ネットワークが切断されていたことがわかりました。最初は、Ubuntu システムのネットワーク カード ドライバーに問題があるのではないかと思いましたが、後で、経由で接続されている Windows システムでも同様であることがわかりました。 Wi-Fi)。結局のところ、ルーティングがリアルタイムではないかどうかしか言えません。

3つの解決策

Qt のドキュメントによると、試行錯誤中でさまざまな方法が使われているようですが、ネットワークケーブルをどのように抜いても、Qt の tcpsocket クラスはネットワークが切断されたことを認識せず、依然として正常に送信されています。(Qt のこのクラスは、一般的な TCP IP クラスよりも優れていると思いました。これは単なる概観です。キープアライブ オプションに関しては、statechange は利用できません。多くの TCP サーバーも、有効にするにはキープアライブ オプションを使用する必要がありますか? ? 将来 時間があれば試してみてください); 現在、解決策は 2 つあります: 1) ハートビート パケット方式を使用する; サーバー応答を 1 秒に 1 回送信する; これは CPU リソースを消費します; 2) (推奨)socket_send(qbytedata msg) を検出します独自の送信関数での qtcpsocket 状態のステータス、ステータスが接続されていない場合は、再接続します; ここでの状態変更は、ターゲット IP のサーバーがルートに接続された後にのみ有効になるため (取り外しや切断は有効になりません) )。

おすすめ

転載: blog.csdn.net/jb_mai/article/details/124986953