⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpfile.c

📁 socket编程例子
💻 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 + -