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,那么大多数时候可能就会读到。
因为没有提供解释它的必要上下文,所以“头文件的结尾”是没有意义的。我猜测它与数据包头有关,但是每种协议都不相同,因此我们无法知道。