私は単純なファイル転送アプリケーションを持っています。これは、クライアントから1回の書き込みあたり4096バイトを転送します。サーバー側では、次の呼び出しを使用しています。なぜboost :: asio :: readバッファのデータサイズが読み込みサイズよりも小さいのですか?
tempLen = boost :: asio :: read(l_Socket、boost :: asio :: buffer(buf、bufSize)、boost :: asio :: transfer_all() 、エラー)。
テンプレートは1440バイトですが、bufを読み込むと11バイトしかありません。以下のサーバーコードを貼り付けてコピーします。私はsocket.read_someとasio :: readの両方を試しましたが、両方とも同じ結果に終わりました。誰かが私がここで間違っていることを説明することはできますか?
//boost::array<char, 4096> buf;
char* buf = new char[4096];
char* bigBuffer = new char[2097152];
std::string strBuffer;
strBuffer.clear();
for (;;) // Loop for the whole file length
{
boost::asio::read_until(l_Socket, request_buf, "\n\n");
std::istream request_stream(&request_buf);
request_stream >> bufSize;
std::cout<< "Size of the Compressed data transfer:" << bufSize << "\n";
// Clear the stream
request_stream.clear();
memset(bigBuffer, 0, 2097152);
memset(buf, 0, 4096);
if(bufSize == 0)
break;
size_t len = 0, prevLen = 0, tempLen = 0;
try{
//tempLen = l_Socket.read_some(boost::asio::buffer(buf, bufSize), error);
tempLen = boost::asio::read(l_Socket, boost::asio::buffer(buf, bufSize), boost::asio::transfer_all(), error);
std::cout << "Length from read: " << tempLen << " Buffer Size: " << bufSize << std::endl;
prevLen = len;
len += tempLen;
}
catch (boost::exception& e)
{
std::cerr << diagnostic_information(e);
}.....}
編集:
はちょうど私がクライアントで次の機能で圧縮されたデータを送信する場合にのみ、この問題が起こっている確認。
圧縮後(送信前)の "クライアント"自体でデータを解凍すると、データが正しく印刷されています。しかし、サーバーで受信した後にデータを読むと、私はこの問題に直面しています。
あなたの質問に使用している言語をタグ付けすることで、より多くの注目を集めることができます。 –
J.N - アドバイスをいただきありがとうございます。それを覚えておいてください。 –