📄 ftpfile.c
字号:
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <fcntl.h>#include <termio.h>#include "srcc.h"int errno;FILE *fp;//#define SERV_TCP_PORT 5000CccbFtp(int port){ int sockfd; struct sockaddr_in cli_addr; struct hostent *hp; struct netpkg rcv; int rcvlen; int fp2; int fsize; int ret; char fname[255]; char mgid[7]; char ermg[255]; struct termio old,new; if ( (sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0 ) { strcpy(ERRMSG,"无法建立联接\0"); return ERROR; } bzero( (char *)&cli_addr,sizeof(cli_addr)); if ( ((struct hostent *)hp=(struct hostent *)gethostbyname("cccbhosts")) == NULL) { strcpy(ERRMSG,"无法搜索前台主机地址"); return ERROR; } bcopy(hp->h_addr,(char *)&cli_addr.sin_addr,hp->h_length); cli_addr.sin_port=htons(port); cli_addr.sin_family=AF_INET; if ( connect(sockfd,(struct sockaddr_in *)&cli_addr,sizeof(cli_addr)) < 0 ){ fprintf(fp,"Could not connect cccbhosts\n"); fflush(fp); strcpy(ERRMSG,"无法与前台主机联接"); return ERROR; } memset(&rcv,0,sizeof(rcv)); fsize=RcvFileMessage(sockfd,fname); fprintf(fp," fname = %s \n",fname); fprintf(fp," fsize = %d \n",fsize); umask(000); if ( (fp2=open(fname,O_CREAT|O_WRONLY|O_NONBLOCK|O_SYNC|O_TRUNC),666) < 0 ) strcpy(ERRMSG,"无法接收文件"); while ( 1 ) { if ( (rcvlen = LxRcv(sockfd,&rcv,0)) > 0 ) { fprintf(fp,"Rcv size = %d\n",rcvlen); fflush(fp); switch(rcv.pkg_kind) { case MSG0004: fprintf(fp,"recive message = %s\n",rcv.pkg_msg); memset(mgid,0,sizeof(mgid)); memset(ermg,0,sizeof(ermg)); strcpy(mgid,rcv.pkg_msg,7); fflush(fp); /* ftp end */ if ( strncmp(mgid,"AAAAAAA",7) ) { /* ftp fail */ RcvErrMsg(sockfd,&ermg); fprintf(fp,"Rceive error message %s\n",ermg); fflush(fp); close(sockfd); return ERROR; break; } else { /* check file size */ int fsize2; close(fp2); fsize2=GetFileSize(fname); if ( fsize2 != fsize ) { memset(mgid,0,sizeof(mgid)); memset(ermg,0,sizeof(ermg)); strcpy(mgid,"FER0001"); ret=SendMessage(sockfd,mgid); GetErrMsg(mgid,&ermg); strcpy(ERRMSG,ermg); } else ret=SendMessage(sockfd,"AAAAAAA"); if ( ret < 0 ) { fprintf(fp,"Send message error!!!\n"); fflush(fp); close(sockfd); return ERROR; break; } close(sockfd); return SUCCESS; break; } default: write(fp2,rcv.pkg_msg,rcv.pkg_kind);// fsync(fp2); break; } } else { strcpy(ERRMSG,"接收文件错误!!!"); break; } memset(&rcv,0,sizeof(rcv)); } close(fp2); close(sockfd); return SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -