FTP客户端C++版Word下载.docx

上传人:b****6 文档编号:18603697 上传时间:2022-12-29 格式:DOCX 页数:24 大小:20.69KB
下载 相关 举报
FTP客户端C++版Word下载.docx_第1页
第1页 / 共24页
FTP客户端C++版Word下载.docx_第2页
第2页 / 共24页
FTP客户端C++版Word下载.docx_第3页
第3页 / 共24页
FTP客户端C++版Word下载.docx_第4页
第4页 / 共24页
FTP客户端C++版Word下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

FTP客户端C++版Word下载.docx

《FTP客户端C++版Word下载.docx》由会员分享,可在线阅读,更多相关《FTP客户端C++版Word下载.docx(24页珍藏版)》请在冰豆网上搜索。

FTP客户端C++版Word下载.docx

voidsubcommend(string&

filepath,string&

filename);

//输入和转换IP地址

voidstorfile(char*FTPIP);

//上传文件

voidretrfile(char*FTPIP);

//下载文件

voidlistftp(char*FTPIP);

//列出FTP服务器目录

voiddeletefile();

//删除文件

voidquitftp();

//退出客户端

voidhelp();

//帮助

voidabout();

//about

boolishavedetail;

charCmdBuf[MAX_SIZE];

charCommand[MAX_SIZE];

charReplyMsg[MAX_SIZE];

private:

intnReplycode;

boolbConnected;

boolbuser;

SOCKETSocketControl;

SOCKETSocketData;

};

(2)源文件:

FTPClient.cpp

#include"

FTPClient.h"

boolFTPClient:

:

RecvReply()//控制连接接收

{

intnRecv;

memset(ReplyMsg,0,MAX_SIZE);

nRecv=recv(SocketControl,ReplyMsg,MAX_SIZE,0);

if(nRecv==SOCKET_ERROR)

{

cout<

<

"

Socketreceiveerror!

"

<

endl;

closesocket(SocketControl);

returnfalse;

}

//获取相应信息与响应码

if(nRecv>

4){

char*ReplyCodes=newchar[3];

memset(ReplyCodes,0,3);

memcpy(ReplyCodes,ReplyMsg,3);

nReplycode=atoi(ReplyCodes);

returntrue;

}

SendCommand()//向FTP服务器发送命令

//控制连接发送数据

intnSend;

nSend=send(SocketControl,Command,strlen(Command),0);

if(nSend==SOCKET_ERROR){

Socketsenderror!

DataConnect(char*ServerAddr)

//向FTP服务器发送PASV命令

memset(Command,0,MAX_SIZE);

memcpy(Command,"

PASV"

strlen("

));

memcpy(Command+strlen("

),"

\r\n"

2);

if(!

SendCommand())

//获取PASV命令的应答信息

if(RecvReply()){

if(nReplycode!

=227){

cout<

PASVresponseerror!

closesocket(SocketControl);

returnfalse;

}

//分离PASV命令应答信息

char*part[6];

if(strtok(ReplyMsg,"

("

))

for(inti=0;

i<

5;

i++)

{

part[i]=strtok(NULL,"

"

);

if(!

part[i])

returnfalse;

part[5]=strtok(NULL,"

)"

if(!

part[5])

else

//获取FTP服务器数据端口、

unsignedshortServerPort;

ServerPort=unsignedshort((atoi(part[4])<

8)+atoi(part[5]));

//创建数据连接Socket

SocketData=socket(AF_INET,SOCK_STREAM,0);

if(SocketData==INVALID_SOCKET){

Createsocketerror!

//定义Socket地址和端口

sockaddr_inserveraddr2;

memset(&

serveraddr2,0,sizeof(serveraddr2));

serveraddr2.sin_family=AF_INET;

serveraddr2.sin_port=htons(ServerPort);

serveraddr2.sin_addr.S_un.S_addr=inet_addr(ServerAddr);

//向FTP服务器发送Connect请求

intnConnect;

nConnect=connect(SocketData,(sockaddr*)&

serveraddr2,sizeof(serveraddr2));

if(nConnect==SOCKET_ERROR){

endl<

Serverconnecterror!

mkdirectory()//FTP服务器发送MKD命令

ishavedetail){

请输入你要创建的文件夹名:

;

memset(CmdBuf,0,MAX_SIZE);

cin.getline(CmdBuf,MAX_SIZE,'

\n'

MKD"

),CmdBuf,strlen(CmdBuf));

)+strlen(CmdBuf),"

//cout<

Command:

Command<

endl;

//-----------获得MKD命令的应答信息------------------------

if(RecvReply())

if(nReplycode==257)//257:

ReplyMsg<

else

MKDresponseerror!

changedir()//FTP服务器发送CWD命令

ishavedetail)

请输入你要进入的文件夹路径:

CWD"

//-----------获得CWD命令的应答信息------------------------

nReplyCode:

nReplycode<

if(nReplycode==250)//257:

CWDresponseerror!

FTPConnection(char*FTPIP,intport)//建立与Socket库绑定

WSADATAWSAData;

//WSADAT:

WSADATA结构被用来储存调用AfxSocketInit全局函数返回的WindowsSockets初始化信息

if(WSAStartup(MAKEWORD(2,2),&

WSAData)!

=0)//WSAStartup:

初始化当前线程通信环境MAKEWORD:

合并短整数

WSAStartuperror!

//创建控制连接Socket

SocketControl=socket(AF_INET,SOCK_STREAM,0);

if(SocketControl==INVALID_SOCKET)

Creatsocketerror!

sockaddr_inserveraddr;

serveraddr,0,sizeof(serveraddr));

serveraddr.sin_family=AF_INET;

//

serveraddr.sin_port=htons(port);

//端口

serveraddr.sin_addr.S_un.S_addr=inet_addr(FTPIP);

//地址

cout<

FTP>

Controlconnect..."

intnConnect=connect(SocketControl,(sockaddr*)&

serveraddr,sizeof(serveraddr));

if(nConnect==SOCKET_ERROR)

//获得Connect应答信息

if(nReplycode==220)

Connetresponseerror!

bConnected=true;

useuser()//向FTP服务器发送USER命令

用户名:

memset(CmdBuf,0,MAX_SIZE);

cin.getline(CmdBuf,MAX_SIZE,'

USER"

Command<

//获得USER命令的应答信息

if(nReplycode==331)//230:

Userloggedin,proceed;

//331:

UserNameokay,needpassword;

USERresponseerror!

buser=true;

usepass()//向FTP服务器发送PASS命令

if(buser)

buser=false;

密码:

cout.flush();

MAX_SIZE;

CmdBuf[i]=getch();

if(CmdBuf[i]=='

\r'

{

CmdBuf[i]='

\0'

break;

}

else

cout<

'

*'

memset(Command,0,MAX_SIZE);

memcpy(Command,"

PASS"

memcpy(Command+strlen("

//获得PASS命令的应答信息

if(RecvReply())

if(nReplycode==230)//230:

PASSrespanseerror!

returntrue;

voidFTPClient:

storfile(char*FTPIP)

请输入上传文件名:

ifstreamf2;

f2.open(CmdBuf,ios:

in);

f2)

Cannotopenfile!

return;

stringstrPath(CmdBuf);

stringfilepath,filename;

intnPos=strPath.rfind('

\\'

if(-1!

=nPos)

filename=strPath.substr(nPos+1,strPath.length()-nPos-1);

filepath=strPath.substr(0,nPos);

filename:

filename<

filepath:

filepath<

memcpy(CmdBuf,filename.data(),strlen(filename.data()));

charFtpStor[MAX_SIZE];

memset(FtpStor,0,MAX_SIZE);

memcpy(FtpStor,FTPIP,strlen(FTPIP));

DataConnect(FtpStor))

STOR"

if(nReplycode==125||nReplycode==150||nReplycode==226)

ReplyMsg;

else{

STORrespanseerror!

return;

charListBuf2[MAX_SIZE];

while(true)

memset(ListBuf2,0,MAX_SIZE);

f2.read(ListBuf2,MAX_SIZE);

intnStor=send(SocketData,ListBuf2,MAX_SIZE,0);

if(nStor==SOCKET_ERROR)

closesocket(SocketData);

break;

f2.close();

closesocket(SocketData);

if(nReplycode==226)

STORresponseerror!

retrfile(char*FTPIP)

请输入下载文件名:

charFtpRetr[MAX_SIZE];

memset(FtpRetr,0,MAX_SIZE);

memcpy(FtpRetr,FTPIP,strlen(FTPIP));

DataConnect(FtpRetr))

RETR"

\r\n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1