我可以发送非常大的文本文件没问题。我尝试发送jpg等,它不会工作。该文件的大小正确。我不知道我错过了什么..我通过在发送到temp.foo文件之前写入数据来检查我的读写函数。我检查它,它处理任何事情。
我这样发送
for(vector< .... >::iterator it = v.begin(); it!=v.end(); ++it ){
pair<...> p=*it;
send(s,p.first,p.second,0);
}
然后另一个程序读取它
for(i = 0; i < size; i+=max){
b= 0;
while (b== 0) {
if ((b = recv(s, buf, max, 0)) == -1) {
perror("recv");
exit(1);
}
}
stringstream ss;
ss << buf;
char * out = (char*)malloc(b);
memcpy(out,buff,numbytes);// Perhaps my error is here?
}
// write function call here
答案 0 :(得分:4)
关于处理二进制数据的一些一般观点:
确保以二进制模式打开输入和输出文件,例如使用ios::binary
标记或"rb"或"wb"格式。默认为文本模式,它会破坏二进制文件中的行尾字符。
二进制文件可以有NUL字节(\0
),这意味着您不能使用对NUL终止的字符串起作用的字符串处理函数。 C字符串不是NUL安全的。例如,此代码无法正确填充ss
,因为它将buf
解释为以NUL结尾的字符串:
stringstream ss;
ss << buf;
另外,在你指出的那一行,buff
有两个f
是错字吗?在其他行中,您引用了buf
一个f
。
memcpy(out,buff,numbytes);// Perhaps my error is here?