用FTP实现升级,在虚拟机上和本机间调试,可以成功
但在真实的局域网中调试,就没反应,跟踪发现执行到FtpFindFirstFile时,不动了
120秒后这个函数返回0,查看出错码是:12002(即超时)//...
WIN32_FIND_DATA fd
hDir = FtpFindFirstFile (hFtp, TEXT ("*.*"), &fd, 0, 0);
char msg[32];
sprintf(msg, "%d", GetLastError());
MessageBox(NULL, msg, "FtpFindFirstFile时出错", MB_OK);
//... 
FTP可以正常打开呀。
为什么老超时,服务器端FTP设置没有啥呀,就是个超时设置:120秒。
为什么不让发现文件?权限上,我专门加上了“INTERNET来宾用户”

解决方案 »

  1.   

    FtpFindFirstFile的第四个参数设置一下看看
    http://topic.csdn.net/u/20090102/12/b4f3fea1-0b5c-41a5-8c34-8455f401f365.html
      

  2.   

    我分别设成:
    INTERNET_FLAG_RELOAD
    INTERNET_FLAG_RAW_DATA
    INTERNET_FLAG_EXISTING_CONNECT
    都试了,还是不行...
      

  3.   


    INTERNET_FLAG_PASSIVE
    也试了,不行...
      

  4.   

    确实需要INTERNET_FLAG_PASSIVE
    不过那个帖子,说错添加的位置了。
    我试得结果是,加到InternetConnect里:HINTERNET hInet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, 0, INTERNET_FLAG_DONT_CACHE);
    HINTERNET hFtp = InternetConnect(hInet, "10.125.201.88", 21, 0, 0, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
    WIN32_FIND_DATA fd
    HINTERNET hDir = FtpFindFirstFile(hFtp, TEXT("*.*"), &fd, 0, 0);别的代码我没变,这样就好了。
    不知道为什么要在连接时,设成INTERNET_FLAG_PASSIVE(即被动模式)才行。