我使用 WinInet 连接到 FTP 服务器。我使用FtpCommand()
发送“PASV”命令从主动模式切换到被动模式。我现在正在寻找相反的命令来从被动模式切换到主动模式。有谁知道如何做到这一点?
1 回答
通过发送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()
通过该数据连接传输文件和目录列表。