用FTP協(xié)議編制FTP客戶端程序

字號(hào):

FTP協(xié)議將使用兩條單獨(dú)的TCP連接,一條專用于發(fā)送FTP命令,另一條則專用于傳遞數(shù)據(jù)。初始建立連接時(shí),服務(wù)器在21號(hào)端口上接收來(lái)自客戶端的命令連接。當(dāng)需要傳送數(shù)據(jù)時(shí)(文件列表、文件數(shù)據(jù)等),客戶端向服務(wù)器發(fā)出Port命令,并進(jìn)入監(jiān)聽(tīng)狀態(tài),等待來(lái)自服務(wù)器的數(shù)據(jù)連接請(qǐng)求。
    首先我們利用VC++6.0的AppWizard創(chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序,命名為FtpClientDemo。調(diào)整主對(duì)話框的形式如圖1,為程序生成五個(gè)基于CAsyncSocket的新類,限于篇幅,只列出主要代碼。
    ■CCommandSocket類的主要代碼
    voidCCommandSocket::OnReceive(intnErrorCode)
    {
    //這個(gè)函數(shù)使得服務(wù)器的應(yīng)答消息顯示在編輯框上
    charbuffer=newchar[4096];
    memset(buffer,0,4096);
    this-〉Receive(buffer,1024,0);
    //接收應(yīng)答消息
    MessageList+=buffer;
    m_ReturnMessage-〉SetWindowText(MessageList);
    deletebuffer;
    }
    ■CFileSocket類的主要代碼
    voidCFileSocket::OnReceive(intnErrorCode)
    {
    //函數(shù)將收到的文件數(shù)據(jù)寫(xiě)到文件中
    if(File==NULL)
    {File=newCFile();
    File-〉Open(FileName,CFile::modeWrite|CFile::modeCreate);
    }
    charbuffer=newchar[4096];
    memset(buffer,0,4096);
    this-〉Receive(buffer,4096,0);
    ReceiveString=buffer;
    File-〉Write(ReceiveString,ReceiveString.GetLength());
    deletebuffer;
    }