0
std::ifstream file(localPath.c_str(), std::ifstream::binary);

file.seekg(0, std::ifstream::beg);

while(file.tellg() != -1)
{
    char *p = new char[1024];

    bzero(p, 1024);
    file.read(p, 1024);

    printf("%ld\n", file.gcount());

    n = send(fd, p, strlen(p), 0);
    if (n < 0) {
        error("ERROR writing to socket");
    } else {
        printf("---------%d\n", n);
    }

    delete p;
}

file.close();

実際に送信しようとしている画像は png (サイズ: 27892 バイト) です。読み取りに関する限り、すべてのバイトが適切に読み取られています。ただし、それらをソケットに書き込んでいる間は、数バイトしか書き込まれません。これについて助けが必要です。

前もって感謝します。:)

4

1 に答える 1

6

strlen()バイナリ イメージ データではなく、NULL終了文字列が必要です。使用strlen()すると、最初の (またはゼロ) バイトで停止しNULL、イメージ データは最初または 2 番目のバイトまたは任意の場所にゼロを含む可能性があるため、使用strlen()してサイズを見つけることはできません。画像バッファ。代わりにバッファ サイズを使用する必要があります。

n = send(fd, p, 1024, 0);
于 2012-11-06T11:48:15.180 に答える