Qtを使用してUdpおよびTcpサーバー/クライアントを構築しています。最近のプロジェクトでは、Qtは許可されておらず、Boostを使用することになっています。boost :: asioを実行した後、非常に多くの機能があり、使用法がQtとは大きく異なるため、混乱します。Udp(マルチキャスト、ブロードキャストなど)の場合、私は多かれ少なかれ明確になりました。しかし、Tcpの場合、理解に問題があります。
(すべて非同期にする必要があります)
TCPはストリーム指向であるため、到着したバイト数を知る方法はありません。したがって、を使用します
asio::ip::tcp::socket::async_read_some()
。ただし、Qtには、シグナルに関するすべてのデータを読み取り、を返すreadAll()
ように作成できるソケットがあります。サイズは大きくなる可能性があるため、指定する必要はありません。Boostでこれを達成するにはどうすればよいですか?シグナルは大まかにマップされると思いますが、残り(および「成長可能な」/配列はどうですか? )readyRead()
QByteArray
readyRead()
async_read_some()
readAll()
buffer
disconnected
()TCP接続が切断された場合(サーバー/クライアントがオフ、LANケーブルが接続されていないなど)、Qtで信号が送信されます。Boostの同等のチェックは何でしょうか?ハートビートメッセージを自分で定期的に送信して期待するためにタイマーが必要ですか?