ofstream dest(“ test.txt”,ios :: binary);

 while (true){
  size_t retval = recv (sd, buffer, sizeof(buffer), 0);

   dest.write(buffer,retval);

 if(retval <= 0) { delete[] buffer; break;}
}


现在,recv()函数每个循环返回4个字节,对吗?并且缓冲区包含它,因此返回所有数据,即伪标头和二进制数据(图像),但是我想知道如何仅捕获二进制数据,我知道标头的末尾是“ \ n \ r”对吗?但是更好的解决方案是什么呢?
我做了一个检测“ \ n \ r”何时成立的函数?以及之后如何捕获二进制数据?
或者,我将所有数据都放在内存中,然后解析?但是如何?
我很绝望 :(

最佳答案

recv将返回很多字节,它可以达到您告诉的最大字节数,即sizeof(buffer)。如果那是4,那么大多数时候可能就会读到。

因为没有提供解释它的必要上下文,所以“头文件的结尾”是没有意义的。我猜测它与数据包头有关,但是每种协议都不相同,因此我们无法知道。

09-04 19:36
查看更多