在对FTP文件进行相关处理之前
必须在成功连接
登录服务器以后
才可以执行相关的操作
因为FTP连接是基于Windows套接字编程的
所以FTP的连接过程和Socket连接一样
也就是客户端创建连接套接字以后
调用函数Connect()向服务器连接请求
用户需要特别注意的是待服务器同意连接并返回后,
客户端必须先发送一个空字符串到服务器进行初始化
这样才能进行数据的交换
1 实例化CSocket
CSocket类是MFC对Windows套接字的一个封装类
一般 它使用类的构造函数来实例化对象
但是在实际编程中
构造函数常使用关键字new调用
构造一个没有初始化的套接字对象
CSocket m_clientsocket=new CSocket
//构造一个套接字对象m_clientsocket
构造该对象后
必须调用成员函数Create 创建完整的套接字句柄
BOOL CSocket::Create(UINT nSocketPort,
int nSocketType=SOCK_STREAM,LPCTSTR lpszSocketAddress=NULL);
参数nSocketPort用来指定与套接字相关联的本地端口号
默认值为0
设置FTP端口21
nSocketType指定套接字类型
SOCK+STREAM 默认为表示创建流式套接字
FTP客户端均采用默认类型
lpszSocketAddress指定创建套接字的网络地址
默认为NULL
客户端一般设置为NULL
该函数调用成功返回非零值,否则返回0,表示出错。
2 实现连接功能
用户创建套接字对象以后,就可以调用函数去实现真正的连接了。
实现连接功能的函数是Connect()
BOOL Connect(LPCSTR lpszHostAddress,UINT nHostPort)
lpszHostAddress指定要连接的服务器地址
nHostPort指定将要连接服务器上的端口号
一般编程中将此参数设置为21号端口
该函数连接服务器成功
则返回true
否则返回false
CSocket *m_clientsocket=new CSocket()
//构造连接套接字对象
m_clientsocket->Create(21,SOCKE_STREAM,FD_READ|FD_WRITE,NULL);
//创建流式套接字
m_clientsocket->Connect("218.6.132.5",21);
这段代码的作用是创建套接字对象后
调用函数Connect进行连接服务器操作
3 封装连接过程
FTP的连接过程主要有自定义函数FTPConnect()实现
根据用户输入的服务器地址和端口号
连接FTP服务器
即返回值表示操作是否成功
//连接服务器函数,参数severhost 表示服务器的ip地址 port指定要连接的服务器端口。
BOOL FTPConnect(CString serverhost,int port)
{
CSocket *m_clientsocket=new CSocket();//构造连接套接字对象
m_clientsocket->Create(21,SOCKE_STREAM, FD_READ|FD_WRITE,NULL);
if(!m_clientsocket)//判断套接字对象是否创建成功
{
MessageBox("套接字创建失败!");
return false;
}
if(!(m_clientsocket->Connect(serverhost,port)))return false;
//连接FTP服务器
else {return true;}//连接成功将返回true
}
在函数中
参数serverhost和port分别指定要连接的服务器的地址和端口
程序首先创建流式套接字m_clientsocket
调用CSocket类的函数Connect()连接FTP服务器
当连接失败时
函数返回false
否则返回true
自定义函数FTPConnect()封装完成后便可以对其进行调用
Void Onconnect()
{
CString address="218.6.132.5" ;//对应ip地址字符串变量并初始化
int port = 21; //定义端口变量并初始化
if(!(FTPConnect((LPCSTR)address,port)))//判断FTPConnect调用是否成功
{
MessageBox("连接失败!"); //提示失败
}
else
{
MessageBox("连接服务器成功!"); //否则提示成功
}
}
函数OnConnect()根据定义的ip地址和端口号
调用自定义函数连接服务器
IP地址和端口号可以由用户进行自定义