0

非常に大きなテキスト ファイルを問題なく送信できます。jpgなどを送信しようとしましたが、うまくいきません。ファイルは正しいサイズです。何が欠けているのかわかりません.temp.fooファイルに送信する前にデータを書き込んで、読み取り関数と書き込み関数をチェックします。私はそれをチェックし、それは何でも処理します。

こんな感じでお送りします

for(vector< .... >::iterator it = v.begin(); it!=v.end(); ++it ){
    pair<...> p=*it;
    send(s,p.first,p.second,0);
}

次に、他のプログラムがそれを読み取ります

    for(i = 0; i < size; i+=max){
    b= 0;
    while (b== 0) {
        if ((b = recv(s, buf, max, 0)) == -1) {
            perror("recv");
            exit(1);
        }
}
    stringstream ss;
    ss << buf;
    char * out = (char*)malloc(b); 
    memcpy(out,buff,numbytes);// Perhaps my error is here?
}
// write function call here
4

1 に答える 1

4

バイナリ データの処理に関する一般的なポイント:

  1. ios::binary入力ファイルと出力ファイルは、フラグや"rb"または"wb"形式などのバイナリ モードで開いていることを確認してください。デフォルトはテキスト モードで、バイナリ ファイルの行末文字をマングルします。

  2. バイナリ ファイルには NUL バイト ( \0) を含めることができます。つまり、NUL で終わる文字列に対して機能する文字列処理関数を使用することはできません。C 文字列は NUL セーフではありません。たとえば、次のコードはNUL で終了する文字列としてss解釈されるため、適切に入力されません。buf

    stringstream ss;
    ss << buf;
    

また、ご指摘の行はbuff、2つともfタイプミスですか?他の行では、1 で参照bufしますf

memcpy(out,buff,numbytes);// Perhaps my error is here?
于 2012-09-29T15:24:52.230 に答える