通过C 的插座发送图像

sending an image through a socket in C++

本文关键字:图像 插座 通过      更新时间:2023-10-16
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("%ldn", file.gcount());
    n = send(fd, p, strlen(p), 0);
    if (n < 0) {
        error("ERROR writing to socket");
    } else {
        printf("---------%dn", n);
    }
    delete p;
}
file.close();

实际上,我试图发送的图像是png(大小:27892 bytes),就读数而言,每个字节都在正确地读取。但是,在将它们写入插座的同时,只写了很少的字节。需要帮助。

预先感谢。:)

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

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