【发布时间】:2018-06-14 01:03:33
【问题描述】:
我想在 Unity 2017.1.2.p4 中使用 C#(Mono 实现 - Stable .Net 3.5)访问 FTP。
为了测试,我只是尝试访问 FTP 并列出目录。
public class FTPManager
{
private string host = null;
private string user = null;
private string pass = null;
public FTPManager(string hostIP, string userName, string password)
{
host = hostIP;
user = userName;
pass = password;
ServicePointManager.ServerCertificateValidationCallback += OnCertif;
}
public void Stop()
{
ServicePointManager.ServerCertificateValidationCallback -= OnCertif;
}
public void ListDirectory()
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(host);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.EnableSsl = true;
request.Credentials = new NetworkCredential(user, pass);
try
{
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
Debug.Log(string.Format("Directory List Complete, status {0}", response.StatusDescription));
response.Close();
}
catch (Exception e)
{
Debug.LogException(e);
}
}
private bool OnCertif(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
}
但我总是有同样的错误:
错误:TlsException:身份验证或解密失败。 Mono.Security.Protocol.Tls.RecordProtocol.ProcessAlert (AlertLevel alertLevel, AlertDescription alertDesc)
Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) Rethrow as IOException: 身份验证或解密失败。 Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (IAsyncResult asyncResult)
寻找其他帖子,我看到身份验证是匿名的,或者我的身份验证是正常的。 此外,FTP 需要 TLS 协议。
谢谢你帮助我。
【问题讨论】: