ソケットプログラミングで画像を送信する方法に関する質問
-
05-07-2019 - |
質問
画像の送信についていくつか質問があります。
さまざまな種類のファイル、jpeg、pngなどを処理するにはどうすればよいですか
ファイルが大きい場合は、シーケンス番号を使用する必要があります...しかし、シーケンス番号の数がわからない場合、受信を停止する方法はわかりません。
画像/ファイルの転送に関する私の知識はほとんどありません。私は以前そのようなものをプログラムしたことがありません。いくつかのヒントやコツを取得したいと考えていました=)
たくさんありがとう。
QTを使用していますが、それが私の状況に役立つ場合は
解決
TCPソケットを使用する場合、シーケンス番号は必要ありません。TCPは、データが送信先と同じ順序で到着することを既に保証しているためです。データを送信するだけで、完了したら接続を閉じます。オプションで、追加情報を提供する自己定義型のパケットヘッダーを使用できます(たとえば、1つの接続で複数のファイルを送信する場合)。
他のヒント
少なくとも画像の場合、QImageを使用していると仮定すると、QDataStreamを使用してQImageをQByteArrayに変換し、write()を使用してQTcpSocketオブジェクトに書き込むことができます。このメソッドを使用すると、ほとんどすべてのQtのデータ型をQByteArrayにシリアル化できます。
一般的なファイルの場合、QIODevice(特にQFileのベース)はreadAll()などの読み取り関数を提供し、ファイル全体をQByteArrayに読み込んで送信できる状態にします。
Qtディストリビューションには、多くのネットワークサンプルが含まれています。 Qt Assistantをご覧ください->目次->チュートリアルと例->詳細についてはネットワーク。
他のバイナリデータと同じように転送します。 send()
、 recv()
。またはQtが提供する抽象化。