通过C ++中的套接字发送图像

时间:2012-11-06 11:46:55

标签: c++ file-io webserver

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(大小:27892bytes)就读取而言,每个字节都被正确读取。但是,在将它们写入套接字时,只写入了几个字节。需要帮助。

提前致谢。 :)

1 个答案:

答案 0 :(得分:6)

strlen()期望NULL终止字符串,而不是二进制图像数据,当您使用strlen()它停在第一个NULL(或零)字节和图像数据时可以在第一个或第二个字节或任何地方包含零,因此您无法使用strlen()来查找图像缓冲区的大小。你应该使用缓冲区大小:

n = send(fd, p, 1024, 0);