2009-04-06 9 views
3

ドキュメントのboostの例では、tcp:iostreamは非常に単純にネットワーク経由でストリームを送信するために使用されます。他の例では、write()を使用して、より多くのコードが関与する代わりに、ソケットにデータを書き込みます。ブースト、tcpを使用してネットワーク経由でファイルを送信する、推奨される方法?

これら2つの方法の違いは何ですか?長所と短所?代わりに使用すべき何か他にありますか?

答えて

2

IブーストAPIを使ったことがないので、読者は注意してください...;)

TCP ::のiostreamを使用すると、ストリームのようなインタフェースとソケットと対話できるように表示されます。このアプローチは、ソケットプログラミングに関連する複雑さを抽象化しているため、特にソケットプログラミングを初めて使用する方が望ましいでしょう。 TCPベースのデータ共有には多くの意味があります。リクエスト/レスポンスなど、非常に簡単なデータ交換を行っている場合は特に便利です。

ただし、データ交換の下位レベルの制御が必要な場合があります。あなたの受信機が同時にたくさんのメッセージを受信した場合、iostreamからの事実の後にそれらを処理するのではなく、ソケットから各メッセージを読むことを好むかもしれません。送信側では、メッセージがオブジェクトとして構成されている場合は、最初にオブジェクトをストリームに変換するのではなく、オブジェクトを送信するほうが簡単です。この場合、読み込み/書き込み機能が望ましいでしょう。

私自身の(非ブースト)ソケットプログラミング経験からは、多少複雑ではあるが柔軟性が増すので、通常は下位レベルの機能を扱いたい。私はそれが助けて欲しい

1

私はネットワーク通信のためにブーストを使用していませんが、 "ip :: tcp"クラスのセットは、基盤となるソケットベースの通信をC++でラップすると思います。 boostメソッドを使用する方が、すでに非同期通信を実装しているので簡単です。 通常のソケット通信は柔軟性がありますが扱いにくいです。アプリケーションがパフォーマンス重視の場合にのみ使用してください。 しかし、何か落とし穴があります。 "ip :: tcp"(何か書き込むたびにストリームをフラッシュする必要があります)(< < std :: flush)しかし、私はそのメリットが欠点になると思います。

関連する問題