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