📄 ftpcli.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -