各位大哥,能否和小弟说一下当我向FTP发送LIST命令之后,如何分析FTP传回来的信息??给个代码是最好了,谢谢各位。如果分不够再加。

解决方案 »

  1.   

    给个例子供楼主参考
    BOOL CFTPclient::List()
    {
    CString lhost,temp,rhost;
    UINT localsock,i;
    CFile datafile;
    CSocket sockSrvr;
    CAsyncSocket datachannel;
    int num, sum;
    const int BUFSIZE = 4096;
    DWORD lpArgument=0;

    m_buf.RemoveAll();
    m_buf.SetSize(BUFSIZE);
    if(!FTPcommand("TYPE I")) 
    return FALSE; // ÇëÇó¶þ½øÖÆģʽ m_retmsg.LoadString(IDS_FTPMSG6);
    // »ñÈ¡±¾µØIPµØÖ·
    if(!m_Ctrlsok->GetSockName(lhost,localsock)) 
    return FALSE;;
    while(1) {
    // ½«µãת»¯³É¶ººÅ
    if((i=lhost.Find("."))==-1) break;
    lhost.SetAt(i,',');
    }
    if((!sockSrvr.Create(0, SOCK_STREAM, NULL))
    || (!sockSrvr.Listen()))
    return FALSE;
    if(!sockSrvr.GetSockName(temp,localsock))
    return FALSE;
    lhost.Format(lhost+",%d,%d", localsock / 256, localsock % 256);
    if(!FTPcommand("PORT "+lhost)) 
    return FALSE; if(!WriteStr("LIST") )
    return FALSE;
    if(!ReadStr())
    return FALSE; 
    if(!sockSrvr.Accept(datachannel)) 
    return FALSE; 
    if((!datachannel.AsyncSelect(0)) || 
    (!datachannel.IOCtl(FIONBIO,&lpArgument))) {
    m_retmsg.LoadString(IDS_FTPMSG6);
    return FALSE;
    }
    sum = 0;
    while(1) { // »ñµÃÊý¾Ý
    TRY {
    if(!(num = datachannel.Receive(m_buf.GetData() + sum, BUFSIZE, 0)) 
    || num == SOCKET_ERROR)
    break;
    TRACE("Received :%d\n", num);
    Sleep(0);
    sum += num;
    m_buf.SetSize(sum + BUFSIZE);
    }
    CATCH (CException,e) {
    m_retmsg.LoadString(IDS_FTPMSG5);
    return FALSE;
    }
    END_CATCH
    }
    datachannel.Close();
    }
      

  2.   

    MFC Library Reference   
    CFtpFileFind Class