3

我在读取 jpg 文件时遇到问题。我想通过套接字发送 jpg 图像的纯文本值,所以我以二进制模式打开文件,认为这会起作用,但它不起作用。这是我的代码:

system("./imagesnap image.jpg");
ifstream image("image.jpg", ios::in | ios::binary);
char imageChar[1024];
string imageString;
while (getline(image, imageString))
{
    for (int h; imageString[h] != '\0'; h++) {
        imageChar[h] = imageString[h];
    }
    send(sock, imageChar, strlen(imageChar), 0);
    for (int k = 0; imageChar[k] != '\0'; k++) {
        imageChar[k] = '\0';
    }
}

这是我的输出:

????

如您所见,该文件没有以二进制模式打开,或者它没有工作。

有人可以帮忙吗?

4

1 回答 1

3

使用read()而不是getline(). 一定要使用它的返回值。

#include <sys/types.h>
#include <sys/socket.h>
#include <iostream>
#include <fstream>

void SendFile(int sock) {
  std::ifstream image("image.jpg", std::ifstream::binary);
  char buffer[1024];
  int flags = 0;
  while(!image.eof() ) {
    image.read(buffer, sizeof(buffer));
    if (send(sock, buffer, image.gcount(), flags)) {
      ; // handle error
    }
  }
}
于 2013-08-05T15:41:44.643 回答