关于FTP命令LIST的分析问题 各位大哥,能否和小弟说一下当我向FTP发送LIST命令之后,如何分析FTP传回来的信息??给个代码是最好了,谢谢各位。如果分不够再加。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给个例子供楼主参考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();} MFC Library Reference CFtpFileFind Class 测试贴 用VC++做发邮件程序的时候出错 无聊 散分 4 cimage对象数据写入数据库 进度条引起刷屏的问题 Aictive x控件问题 如何给悬浮窗设置ToolTip提示? 各位大哥,我在使用以下程序来四切分窗口,思路是:先用m_wndSplitter1把窗口切分成上下两个窗口,然后再分别用m_wndSplitter2和m_wndSpl 菜鸟系列:请问如何用VC下载一个URL的HTML文档?急急急!!!!!!!!! 音频传输的问题 请教一下:象紫光输入法那样的的可以拖得到处跑得小框框是怎么做得啊? 请问两个服务器通过Http协议的Post互相通讯是怎样个过程呀?不解!
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();
}
CFtpFileFind Class