誰かが.NetFTPWebRequestクラスを使用して、NATの背後からリモートサーバーにftpを送信したことがありますか?私のコードは次のとおりです。
Dim URI = "ftp://" & sRemoteDir & "/"
Dim ftp As FtpWebRequest = Nothing
Try
ServicePointManager.ServerCertificateValidationCallback = AddressOf ValidateServerCertificate
ftp = CType(FtpWebRequest.Create(URI), FtpWebRequest)
ftp.CachePolicy = New System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore)
ftp.Credentials = New NetworkCredential(sUID, sPw)
ftp.EnableSsl = True
ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails
Dim response As FtpWebResponse = CType(ftp.GetResponse(), FtpWebResponse)
Dim responseStream As Stream = response.GetResponseStream
Dim streamReader As New StreamReader(responseStream)
Dim sb As New StringBuilder()
sb.Append(streamReader.ReadToEnd)
streamReader.Close()
response.Close()
Return sb.ToString()
Catch ex As Exception
Return (ex.Message)
End Try
そして、次の例外が発生します。
「トランスポート接続からデータを読み取れません:接続されたパーティが一定期間後に適切に応答しなかったために接続の試行が失敗したか、接続されたホストが応答しなかったために接続の確立に失敗しました。」
マシンがNATの背後にない場合でも機能するので、コードが優れていることはわかっています。何か案は?マシンには静的IPがあり、指定されたホストとの間のトラフィックに対してすべてのポートが開いています。