Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C套接字中将循环写入二进制文件_C_Sockets_Tcp_Binaryfiles - Fatal编程技术网

如何在C套接字中将循环写入二进制文件

如何在C套接字中将循环写入二进制文件,c,sockets,tcp,binaryfiles,C,Sockets,Tcp,Binaryfiles,我有以下代码片段,其中我使用read读取发送的字节,并将数据存储在一个工作正常的缓冲区中。但我如何使它,使我可以继续写在二进制文件后,每次读取。我的假设是,这可能与没有重置缓冲区有关。谢谢你的帮助 fp = fopen (filename, "wb"); //create a file while (size > 0){ n = read(socket,buffer,size*sizeof(char)); if (n <=0) ret

我有以下代码片段,其中我使用read读取发送的字节,并将数据存储在一个工作正常的缓冲区中。但我如何使它,使我可以继续写在二进制文件后,每次读取。我的假设是,这可能与没有重置缓冲区有关。谢谢你的帮助

fp = fopen (filename, "wb"); //create a file

while (size > 0){        
    n = read(socket,buffer,size*sizeof(char));
    if (n <=0)
        return -1;
    p += n;
    size -= n;

    fwrite(buffer,sizeof(char),size*sizeof(char),fp); //write the content to the file

}
在对fwrite的调用中应该使用n,而不是size。n是您刚刚从套接字读取的量,size是您仍在等待的字节数

fwrite(buffer,sizeof(char),n,fp);

你也不应该乘以sizeof。第二个参数是每个元素的大小,第三个参数是元素的数量;fwrite在内部执行乘法。在您的情况下,它正好起作用,因为sizeofchar始终为1,所以乘法没有改变任何东西。

是的,这实际上就是问题所在!非常感谢。如果fopen成功,你应该证明fp。