"在看<Windows程序设计>,最后一章的最后一个程序是用ftp获取网站的信息,程序中的网址ftp.cpetzold.com已做废,我用ftp.charlespetzold.com能连上,但连接目录charlespetzold.com/ProgWin95/时出错,我用GetLastError()说是“重叠I/O操作在进行中”,这是怎么回事?我用IE可以连接上。"
"应该是上一次请求任务还没返回,禁止再发送请求。FTP就是这样,发了请求等收到回复才能再发请求.不然会乱套的.而你用的例子中请求是异步的,所以在服务器没返回数据之前你可以再发请求,但会失败."刚才没看程序,现在看了程序,确实是同步的,FtpSetCurrentDirectory阻塞了一会才继续啊?

解决方案 »

  1.   

    刚试了一下,用我自己的ftp(127.0.0.1)也不行
      

  2.   

    你用sniffer抓包看看是什么原因。现在只能看通讯过程是怎样的了.
      

  3.   

    我觉得这应该是个很简单的问题,因为这是我自己的ftp,用正常的方法就应该能上去,难道是我的代码有问题?反正是书上的。
         hIntSession = InternetOpen (szAppName, INTERNET_OPEN_TYPE_PRECONFIG,
                                     NULL, NULL, INTERNET_FLAG_ASYNC) ;
         hFtpSession = InternetConnect (hIntSession, FTPSERVER,
                                        INTERNET_DEFAULT_FTP_PORT,
                                        NULL,NULL, INTERNET_SERVICE_FTP, 0, 0) ;
         bSuccess = FtpSetCurrentDirectory (hFtpSession, DIRECTORY) ;
    就这步,bSuccess为0了
      

  4.   

    刚把 if (!bSuccess) 这段注释了,发现下面读文件数据的时候防火墙出来问是否允许通过,又把注释取消开Winsock Expert发现FtpSetCurrentDirectory根本就没访问网络就失败了
      

  5.   

    晕才看到那个INTERNET_FLAG_ASYNC是异部的意思