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

📄 ftp_wzm.cpp

📁 带DirectFB界面的FTP客户端
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	{		ERR( "FtpDTP::RecvData open file [%s] fail!", file.c_str() );			return 2;	}	return 0;}int FtpDTP::ClosData(){	int err = 0;		err = sockClose();		if( err < 0 )		ERR( "FtpDTP::ClosData fail!");		return err;}int FtpInterface::LogInServ( const char *ip, const char *usr, const char *pwd ){	string cmd;		if( (ip == NULL || strlen(ip) <= 0)	  ||(usr == NULL || strlen(usr) <= 0)	  ||(pwd == NULL ))	{		ERR( "FtpInterface::LogInServ [%s][%s][%s].", ip, usr, pwd );		return -1;	}		cmd = ip;	if(ConServ( cmd ))		return 1;	RecvCmd( "220" );	cmd = usr;	cmd = "user "+ cmd;	if(SendCmd( cmd, "331" ))		return 2;	cmd = pwd;	cmd = "pass " + cmd;	if(SendCmd( cmd, "230" ))		return 3;		if(SendCmd( "type a", "200" ))		ERR( "acsii type fail!" );	type = 'a';	mode = 'a';	num = MAXTHEAD;	pid = getpid();		return 0;	}int FtpInterface::PortDTP( FtpDTP &dtp, const char *file ){	unsigned int v[6];	char buffer[MAXNUM];		if( GetAddr( v ) )		return 1;		if( dtp.DataServer( v, file ) )		return 2;			sprintf( buffer, "port %d,%d,%d,%d,%d,%d", 					(unsigned char) v[2],					(unsigned char) v[3],					(unsigned char) v[4],					(unsigned char) v[5],					(unsigned char) v[0],					(unsigned char) v[1]);						if( SendCmd( buffer, "200" ) )		return 3;		return 0;}int FtpInterface::PasvDTP( FtpDTP &dtp, const char *file ){	string iport;		int pos;		if( SendCmd( "pasv", "227" ))		return 1;		iport = getlast();	try	{		if( ( pos = iport.find( "(", 0 )) == string::npos )			return 2;			if(dtp.ConnData( iport.substr( pos, -1 ), file ))			return 3;	}	catch( ... )	{		ERR( "FtpInterface::List pasv recv [%s] fail!", iport.c_str() );		return 4;		}		return 0;}int FtpInterface::List( const char *file ){	FtpDTP dtp;		if( mode == 'a' )	{		if( PasvDTP( dtp, file ) )			return 1;	}	else	{		if( PortDTP( dtp, file ) )			return 1;	}			if( SendCmd( "list", "150" ) )		return 5;		if( mode != 'a' )		if( dtp.DataAccept() )			return 6;				if( dtp.RecvData( type ) )		return 7;		if( dtp.ClosData() )		return 8;				if( RecvCmd( "226" ) )		return 9;		if( SendCmd( "pwd", "257" ) )		return 10;		return 0;}void *pRecvData( void *fi ){	FtpDTP dtp;	string cmd;	int err = 0;	char mode,type;	char file[MAXNUM];	FtpInterface *p = (FtpInterface *)fi;		p->num--;	mode = p->mode;	type = p->type;	strcpy( file, p->file );	if( file == NULL || strlen(file) <= 0 )	{		ERR( "don't know this file [%s].", p->file );		err = 1;		goto END;	}	if( mode == 'a' )	{		if( p->PasvDTP( dtp, p->file ) )		{			err = 2;			goto END;		}	}	else	{		if( p->PortDTP( dtp, file ) )		{			err = 3;			goto END;		}	}		cmd = file;	cmd = "retr " + cmd;	if( p->SendCmd( cmd, "150" ) )	{		err = 4;		goto END;	}			if( mode != 'a' )		if( dtp.DataAccept() )		{			err = 5;			goto END;		}		if( dtp.RecvData( type ) )	{		err = 6;		goto END;	}		if( dtp.ClosData() )	{		err = 7;		goto END;	}				if( p->RecvCmd( "226" ) )	{		err = 8;		goto END;	}END:	if( err )		sprintf( fileinfo, " Get File [%s] Fail!", file  );	else		sprintf( fileinfo, " Get File [%s] Ok!", file  );	p->num++;	kill( p->pid, SIGCHLD);	pthread_exit(NULL);		}int FtpInterface::GetFile( const char *filename ){	pthread_t threadsend;	strcpy( file, filename );		if( num > 0 )		pthread_create(&threadsend, NULL, pRecvData, (void *)this );			return 0;}void *pSendData( void *fi ){	FtpDTP dtp;	string cmd;	int err = 0;	char mode,type;	char file[MAXNUM];	FtpInterface *p = (FtpInterface *)fi;			p->num--;	mode = p->mode;	type = p->type;	strcpy( file, p->file );	if( file == NULL || strlen(file) <= 0 )	{		ERR( "don't know this file [%s].", p->file );		err = 1;		goto END;	}		if( mode == 'a' )	{		if( p->PasvDTP( dtp, file ) )		{			err = 2;			goto END;		}	}	else	{		if( p->PortDTP( dtp, file ) )		{			err = 3;			goto END;		}	}			cmd = file;	cmd = "stor " + cmd;	if( p->SendCmd( cmd, "150" ) )	{		err = 4;		goto END;	}			if( mode != 'a' )		if( dtp.DataAccept() )		{			err = 5;			goto END;		}				if( dtp.SendData( type ) )	{		err = 6;		goto END;	}		if( dtp.ClosData())	{		err = 7;		goto END;	}			if( p->RecvCmd( "226" ) )	{		err = 8;		goto END;	}	END:	if( err )		sprintf( fileinfo, " Put File [%s] Fail!", file  );	else		sprintf( fileinfo, " Put File [%s] Ok!", file  );	p->num++;	kill( p->pid, SIGCHLD );	pthread_exit(NULL);			}int FtpInterface::PutFile( char *filename ){	pthread_t threadsend;	strcpy( file, filename );		if( num > 0 )		pthread_create(&threadsend, NULL, pSendData, (void *)this );		return 0;}int FtpInterface::Cwd( const char *dir ){	string cmd = "cwd ";	if( dir == NULL || strlen(dir) <= 0 )	{		ERR( "don't know this dir [%s].", dir );		return -1;	}		cmd += dir;	if( SendCmd( cmd, "250" ) )		return 2;			return 0;	}int FtpInterface::DeleFile( const char *file ){	string cmd = "dele ";		if( file == NULL || strlen(file) <= 0 )	{		ERR( "don't know this file [%s].", file );		return -1;	}		cmd += file;	if( SendCmd( cmd, "250" ) )		return 1;			return 0;	}int FtpInterface::Mkd( const char *dir ){	string cmd = "mkd ";	if( dir == NULL || strlen(dir) <= 0 )	{		ERR( "don't know this dir [%s].", dir );		return -1;	}		cmd += dir;	if( SendCmd( cmd, "257" ) )		return 1;			return 0;	}int FtpInterface::Rmd( const char *dir ){	string cmd = "rmd ";	if( dir == NULL || strlen(dir) <= 0 )	{		ERR( "don't know this dir [%s].", dir );		return -1;	}		cmd += dir;	if( SendCmd( cmd, "250" ) )		return 1;			return 0;	}int FtpInterface::ReName( char *cmd ){	char buffer[MAXNUM];	char *p;		if( cmd == NULL || strlen(cmd) <= 0 )	{		ERR( "don't know this cmd [%s].", cmd );		return -1;	}		p = strtok(cmd , " ");	sprintf( buffer, "rnfr %s", p );	if( SendCmd( buffer, "350" ) )		return 1;		p = strtok( NULL , " ");	sprintf( buffer, "rnto %s", p );	if( SendCmd( buffer, "250" ) )		return 2;				return 0;	}int FtpInterface::Size( const char *file, char *ret ){	string str;		if( file == NULL || strlen(file) <= 0 )	{		ERR( "don't know this file [%s].", file );		return -1;	}		str = "size ";	str += file;	if( SendCmd( str, "213" ) )		return 1;			str = getlast();	sprintf( ret, str.substr(3, -1 ).c_str() );		return 0;	}int FtpInterface::SwitchType( char &m ){	char cmd[MAXNUM];		if( m != 'a' && m != 'i' )	{		if( type == 'a' )			type = 'i';		else			type = 'a';				m = type;	}	else		type = m;		sprintf( cmd, "type %c", type );		if( SendCmd( cmd, "200" ) )		return 1;			return 0;	}int FtpInterface::SwitchMode( char &m ){	if( m != 'a' && m != 'o' )	{		if( mode == 'a' )			mode = 'o';		else			mode = 'a';				m = mode;	}	else		mode = m;		return 0;	}int FtpInterface::Mdtm( const char *file, char *ret ){	string str;		if( file == NULL || strlen(file) <= 0 )	{		ERR( "don't know this file [%s].", file );		return -1;	}		str = "mdtm ";	str += file;	if( SendCmd( str, "213" ) )		return 1;			str = getlast();	sprintf( ret, str.substr(3, -1 ).c_str() );		return 0;	}int FtpInterface::Abort( ){	if( SendCmd( "abor", "426" ) )		return 1;		if(RecvCmd( "226" ))		return 2;			return 0;	}

⌨️ 快捷键说明

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