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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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 从套接字接收文件时md5sum失败_C_Sockets - Fatal编程技术网

C 从套接字接收文件时md5sum失败

C 从套接字接收文件时md5sum失败,c,sockets,C,Sockets,我使用TCP套接字编写了简单的客户机-服务器应用程序,将文件从一台机器复制到另一台机器 在同一台计算机上复制文件时,验证文件的md5sum成功,但复制到远程计算机时失败:( 本地副本 $>my_copy file.tar.gzroot@127.0.0.1:/home/viswesn/file.tar.gz $>md5sum文件.tar.gz 199b341684f528012e44dbf13512c5fc $>md5sum/home/viswesn/file.tar.gz 199b341684f

我使用TCP套接字编写了简单的客户机-服务器应用程序,将文件从一台机器复制到另一台机器

在同一台计算机上复制文件时,验证文件的md5sum成功,但复制到远程计算机时失败:(

本地副本 $>my_copy file.tar.gzroot@127.0.0.1:/home/viswesn/file.tar.gz

$>md5sum文件.tar.gz
199b341684f528012e44dbf13512c5fc

$>md5sum/home/viswesn/file.tar.gz

199b341684f528012e44dbf13512c5fc

远程拷贝 $>my_copy file.tar.gzroot@blrlapx12:/home/viswesn/file.tar.gz

$>md5sum文件.tar.gz

199b341684f528012e44dbf13512c5fc

$>md5sim/home/viswesn/file.tar.gz

d4cbf92a9d2ed632e429c69334c6bf7a

服务器端的代码 客户端代码
int-getFile(int-sock,char*filename,long-int-startOffSet,long-int-size){
char dir[DIRSIZE+1]={'\0'};
int rc=-1;
FILE*fp=NULL;
int-cnt=0;
int nread=DIRSIZE;
长整数nrecv=0;
int-wc=0;
long int nleft=大小;
fp=fopen(文件名,“w”);
如果(fp==NULL){
printf(“无法打开文件%s%s\n”,文件名,strerror(errno));
}否则{
printf(“打开文件%s成功\n”,文件名);
} 
而(nleft>0){
如果(nleft如果(cnt对于客户端,您正在以文本模式打开文件

fp = fopen(filename, "w");
如果客户端和服务器位于使用不同终端的操作系统上,这可能会导致问题。例如Unix和Windows。 尝试以二进制模式打开文件

fp = fopen(filename, "wb");

如果这样做没有帮助,那么使用kdiff3比较文件,并检查其中的差异。

尝试以二进制模式打开文件
fopen(文件名,“wb”);
,不要忘记在客户端执行相同的操作

注意:您的代码需要更严格的错误检查(fOpenD、Frad、Frad调用可能失败)和一些对称的(为什么StEngfile使用“代码>文件*<代码>当GETFILE自己打开它时。”/P>您可以考虑使用(<代码> NC < /代码>)不是为了调试您的程序或替换您的程序,而是为了调试您的程序。我得到了以下结果:)。问题不在这段代码中,而是在调用此方法之前,我确实发送和接收了创建问题的数据。我通过运行strace找到它,并查找我接收和发送的数据。
fp = fopen(filename, "w");
fp = fopen(filename, "wb");