FtpFindFirstFile老超时挂掉

firefly3233 2012-02-13 02:10:52
用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来宾用户”
...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
firefly3233 2012-02-13
  • 打赏
  • 举报
回复
确实需要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(即被动模式)才行。
firefly3233 2012-02-13
  • 打赏
  • 举报
回复

INTERNET_FLAG_PASSIVE
也试了,不行...
firefly3233 2012-02-13
  • 打赏
  • 举报
回复
我分别设成:
INTERNET_FLAG_RELOAD
INTERNET_FLAG_RAW_DATA
INTERNET_FLAG_EXISTING_CONNECT
都试了,还是不行...
fishion 2012-02-13
  • 打赏
  • 举报
回复
FtpFindFirstFile的第四个参数设置一下看看
http://topic.csdn.net/u/20090102/12/b4f3fea1-0b5c-41a5-8c34-8455f401f365.html

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧