ftpcli.c

来自「一个ftp服务器程序」· C语言 代码 · 共 94 行

C
94
字号
#include	"ftpdaemon.h"char    ftplog_file[_POSIX_PATH_MAX];char    curr_time[80];int main(int argc, char **argv){	int			sockfd;	struct sockaddr_in	servaddr;	char			filename[80];	if ( argc != 3 ) {		printf("Usage : ftpcli <IP Address> <filename>\n");		exit ( 0 );	}	strcpy(filename, argv[2]);		sockfd = socket(AF_INET, SOCK_STREAM, 0);	bzero(&servaddr, sizeof(servaddr));	servaddr.sin_family = AF_INET;	servaddr.sin_port = htons(FTP_SERV_PORT);	servaddr.sin_addr.s_addr = inet_addr( argv[1] );	if (connect(sockfd, (void *)&servaddr, sizeof(servaddr))==-1) {		perror("connect()");		exit(-1);	}	get_file(sockfd, filename);		/* do it all */	close ( sockfd );	exit(0);}get_file(int sockfd, char *filename){	char Downname[80];	FILE *rcvfp;	char buffer[FILEBUF_SIZE];	int filelen;	int num, left, i, j, bytes;	char ack;	strcpy(Downname, "/tmp/TESTTEST");	if ( (rcvfp = fopen(Downname, "wb")) == NULL ) {		printf("Cannot open file [%s] to write\n", Downname);		return ;	}	if ( send_nbytes(sockfd, filename, NAMELEN) != E_SUCC ) {		fclose ( rcvfp );		printf("send_nbytes() fail\n");		return ;	}	if ( recv_nbytes(sockfd, buffer, _FILELEN_, -1) != E_SUCC ) {		fclose( rcvfp );		printf("recv_nbyters() fail\n");		return ;	}	filelen = atoi ( buffer );	if ( filelen <= 0 ) {		printf("Filelen < 0\n");		return ;	}	num  = filelen / FILEBUF_SIZE;	left = filelen % FILEBUF_SIZE;	for ( j=0; j<=num; j++) {		bytes = ( j == num ) ? left : FILEBUF_SIZE;		if ( bytes > 0 ) {			memset(buffer, 0, sizeof(buffer));			if ( recv_nbytes ( sockfd, buffer, bytes, -1) != E_SUCC ) {				ack = ACK_FAIL;				send_nbytes( sockfd, &ack, 1 );				fclose( rcvfp );				return ;			}			ack = ACK_SUCC;			if ( send_nbytes( sockfd, &ack, 1) != E_SUCC ) {				fclose( rcvfp );				return ;			}			if ( fwrite( buffer, bytes, 1, rcvfp ) != 1 ) {				printf("Fwrite error\n");				fclose( rcvfp );				return ;			}		}	}	printf("File get success...\n");}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?