的对应控制
Temp="PASS "+Temp+"\r\n";
ControlSocket-〉Send(Temp,Temp.GetLength(),0);
//发Pass命令,校验口令
LisentPort(LISTFILE);
//数据连接的对象为目录列表
ControlSocket-〉Send("LIST \r\n",7 ,0);
//发List命令,要求列表目录
}
void CFtpClientDemoDlg::OnDownLoad( )
//
下载文件
{
CString String;
LisentPort(DOWNLOAD);
//获得要下戴文件的文件名
m_LocalFile.GetWindowText(String);
// m_LocalFile为“文件名”编辑框的对应控制
String="RETR "+String+"\r\n";
ControlSocket-〉Send(String,String.GetLength( ),0);
//发RETR命令,
下载文件
}
void CFtpClientDemoDlg::LisentPort(UINT Flag)
{
//根据要求选择不同的数据连接对象
if(LisentSocket!=NULL)
//清空LisentSocket
{ LisentSocket-〉Close();
delete LisentSocket;
LisentSocket=NULL;
}
if(Flag= =LISTFILE)
//如果为目录列表数据连接对象
{ LisentSocket=new CPortSocket(LISTFILE);
LisentSocket-〉SetListBox(&&m_FileList);
//传列表框到CLisentSocket类中
}
else if(Flag= =DOWNLOAD)
//如果为文件传输数据连接对象
{ CString String;
m_LocalFile.GetWindowText(String);
LisentSocket=new CPortSocket(DOWNLOAD);
LisentSocket-〉SetFileName(String);
//传文件名到CLisentSocket类中
}
LisentSocket-〉Create();
//建立Socket并进行监听,等待FTP服务器进行数据连接
LisentSocket-〉Listen();
//取得数据连接Socket的IP地址和监听端口,并把它们作为Port命令的参数
SOCKADDR_IN listing_address, control_address;
int addr_size;
addr_size = sizeof(listing_address);
LisentSocket-〉GetSockName((SOCKADDR )&&listing_address, &&addr_size); //
取IP地址
ControlSocket-〉GetSockName((SOCKADDR )&&control_address, &&addr_size); /
/取端口
unsigned char port = (unsigned char )&&(listing_address.sin_port);
unsigned char host = (unsigned char )&&(control_address.sin_addr);
CString strBuffer;
strBuffer.Format("PORT %i,%i,%i,%i,%i,%i\r\n",(int)host[0], (int)host, (
int)host, (int)host,(int)port[0], (int)port);
ControlSocket-〉Send(strBuffer,strBuffer.GetLength(),0);
//发送Port命令,进行数据连接
}
以上代码在VC++ 6.0、Windows 98上运行通过。