0

我可以发送非常大的文本文件没问题。我尝试发送 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
4

1 回答 1

4

关于处理二进制数据的一些一般要点:

  1. 确保以二进制模式打开输入和输出文件,例如使用ios::binary标志或“rb”“wb”格式。默认为文本模式,它将破坏二进制文件中的行尾字符。

  2. 二进制文件可以有 NUL 字节 ( \0),这意味着您不能使用处理 NUL 终止字符串的字符串处理函数。C 字符串不是 NUL 安全的。例如,此代码将无法ss正确填写,因为它解释buf为以 NUL 结尾的字符串:

    stringstream ss;
    ss << buf;
    

另外,在你指出的那一行,是buff有两个fsa 错字吗?在其他行中,您buf使用 one引用f

memcpy(out,buff,numbytes);// Perhaps my error is here?
于 2012-09-29T15:24:52.230 回答