3

私は、5 台 (またはそれくらい) のサーバーへのソケット接続を行うLinuxクライアントを作成する予定です。クライアントはそれぞれに「行」(文字列の後に「\n」が続く) を送信し、それぞれから行を受け取ります。

クライアントでselect()またはepoll()を使用したいです。ただし、これは TCP およびストリームベースであるため、 select()がポップしたときにシステム バッファに「行」全体が含まれているとは限りません。私が探しているのは、 epoll( )およびsysread()に似た API を提供するライブラリですが、データの全体がバッファリングされ、すぐに読み取ることができるように機能します。

インターネット検索でこのようなものを見つけることができなかったことに驚いています。これはかなり一般的なニーズだと思っていたでしょう。(問題を正しく表現していない可能性があります。) 書くのはそれほど難しくないように思えますが、オープンソースのソリューションの方が防弾効果が高いのではないかと思います。

4

3 に答える 3

2

boost asioを見てください。特に、それはするasync_read_until機能を持っています

区切り文字が含まれるか、正規表現と一致するか、または関数オブジェクトが一致を示すまで、非同期操作を開始して streambuf にデータを読み込みます。

http を使用している場合は、非同期クライアントをサポートするcpp-netlibもお勧めします。

于 2013-01-27T00:42:07.077 に答える
1

私のMUSCLE ネットワーク ライブラリはこれを ( PlainTextMessageIOGatewayクラスを介して) 提供します。それは私のプロジェクトでうまく機能し、BSD ライセンスなので、必要に応じて自由に使用できます。tests サブフォルダーに含まれているPortableplaintextclientプログラムは、その使用方法の非常に単純な (94 行) 例です。ただし、必要なバッファリング ロジックを自分で記述するだけでもそれほど難しくないという他の回答者の意見は正しいです。ただし、作成済み/デバッグ済みのソリューションが必要な場合は、これが 1 つです。

于 2013-01-27T01:14:40.110 に答える
-1

そのような事はありません。接続ごとにバッファが必要であり、行ができるまでselect()/ poll()/ epoll()の結果で指定されたとおりにバッファを読み込む必要があります。これらのAPIは、あなたのようにラインターミネータを気にしません。

于 2013-01-27T00:16:58.807 に答える