我使用WinInet连接到FTP服务器。我使用FtpCommand()
发送" PASV"命令从活动模式切换到被动模式。我现在正在搜索相反的命令,从Passive切换到Active模式。有谁知道怎么做?
答案 0 :(得分:2)
通过发送PORT
(或EPRT
)命令而不是发送PASV
(或EPSV
)命令来启用活动模式。 PORT
/ EPRT
告诉服务器它需要在您的系统上主动连接哪个IP /端口。
如果您想了解FTP协议的工作原理,建议您阅读FTP规范RFC 959及其各种扩展,尤其是RFC 2428和RFC 3659。
在WinInet中,当您致电InternetConnect()
或InternetOpenUrl()
时,通常会在会话开始时建立传输模式。如果指定INTERNET_FLAG_PASSIVE
标志,则会强制执行被动模式。如果未指定标志,则模式由用户的默认Internet选项确定。此模式允许FtpGetFile()
/ FtpPutFile()
和FtpFindFirstFile()
/ InternetFindNextFile()
函数在其自己的数据连接上运行。为会话建立模式后,无法更改AFAIK。
但是,您可以使用FtpCommand()
手动发送任何FTP命令,包括PASV
/ EPSV
和PORT
/ EPRT
。如果将fExpectResponse
参数设置为TRUE,则phFtpCommand
输出参数将在创建数据套接字时为您提供新的HINTERNET
句柄。您可以使用InternetReadFile()
和InternetWriteFile()
的句柄通过该数据连接传输文件和目录列表。