0

我使用 WinInet 连接到 FTP 服务器。我使用FtpCommand()发送“PASV”命令从主动模式切换到被动模式。我现在正在寻找相反的命令来从被动模式切换到主动模式。有谁知道如何做到这一点?

4

1 回答 1

2

通过发送PORT(或EPRT)命令而不是发送PASV(或)命令来启用活动模式EPSVPORT/EPRT告诉服务器它需要在您的系统上主动连接到哪个 IP/端口。

如果您想了解 FTP 协议的工作原理,我建议您阅读 FTP 规范RFC 959及其各种扩展,尤其是RFC 2428RFC 3659

在 WinInet 中,传输模式通常在您调用InternetConnect()或时在会话开始时建立InternetOpenUrl()。如果您指定INTERNET_FLAG_PASSIVE标志,它会强制使用被动模式。如果不指定标志,则模式由用户的默认 Internet 选项确定。此模式允许FtpGetFile()/FtpPutFile()FtpFindFirstFile()/InternetFindNextFile()函数通过它们自己的数据连接进行操作。一旦为会话建立了模式,就无法更改,AFAIK。

但是,您可以使用FtpCommand()手动发送任何 FTP 命令,包括PASV/EPSVPORT/ EPRT。如果您将该fExpectResponse参数设置为 TRUE,则phFtpCommand输出参数将HINTERNET在创建数据套接字时为您提供一个新句柄。您可以使用该句柄InternetReadFile()InternetWriteFile()通过该数据连接传输文件和目录列表。

于 2017-06-07T15:43:57.277 回答