2

C++ でソケットを使用しています。このプログラムは単に HTTP ページを要求し、それを buffer に読み込んでから、バッファーbuf[512]を表示します。ただし、ページにはバッファーよりも多くのデータを含めることができるため、残りのスペースがなくなると切り取られます。バッファー サイズを大きくすることはできますが、それは良い解決策とは思えません。これは私が使用しているコードです:

char buf[512];
int byte_count = recv(sockfd, buf, sizeof(buf), 0);

バッファーとして使用する C++ の char 配列の代わりになるものは何ですか?

4

2 に答える 2

2

データをどうするかによって異なります。出力ストリームにダンプしたいだけの場合、適切なことは、現在行っていることを実行することですが、読み取るデータがなくなるまでループで実行し、それぞれの後にバッファを出力ストリームに書き込みます。読んだ。

于 2010-08-10T15:37:11.813 に答える
1

基本的にはありません - recv を使用する場合、すべての入力を読み取るまで繰り返し呼び出す必要があります。もちろん、成長するバッファをサポートするより高度なソケット ライブラリを使用することもできますが、単純な古い recv() の場合、char の配列 (または char のベクトル) が必要です。

もちろん、読み取ったデータを文字列などの動的バッファに追加できます。

string page;
while( len = recv( ... ) ) {
   page.append( buf, len );
}
于 2010-08-10T15:34:02.203 に答える