我用C#写的FTP服务器程序,主要功能是往FTP服务器上传、下载文件、显示文件目录等文件管理方面的用途;我在自己电脑上搭建了一个FTP服务器(设置了SSL)用来测试程序,测试结果是程序预期功能都实现了;后来到公司的FTP服务器(也设置了SSL)上测试,发现连接不上公司的服务器,并显示错误为“ 431 Unable to negotiate secure command connection”,有没有大神知道问题出在哪里,怎么解决?
#region 获取当前目录下明细(包含文件和文件夹) string[] GetFilesDetailList()
FtpWeb fw = new FtpWeb("10.11.11.21:990", "", "ftpuser", "1234"); //这部分应该是没问题的
string[] FilesDetailList = fw.GetFilesDetailList();
int FilesDetailListLength = FilesDetailList.Length;
Console.WriteLine(FilesDetailListLength);
for (int i = 0; i < FilesDetailListLength; i += 1)
{
string FilesDetail = FilesDetailList[i];
Console.WriteLine("{0}", FilesDetail);
}
//备注:
#endregion
#region GetFilesDetailList() 获取当前目录下明细(包含文件和文件夹)
/// <summary>
/// 获取当前目录下明细(包含文件和文件夹)
/// </summary>
/// <returns></returns>
public string[] GetFilesDetailList()
{
string[] downloadFiles;
try
{
StringBuilder result = new StringBuilder();
FtpWebRequest ftp;
ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
ftp.UseBinary = true; // 指定数据传输类型
ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;//ListDirectory ListDirectoryDetails
#region SSL
ftp.EnableSsl = true;
//如果要连接的 FTP 服务器要求凭据并支持安全套接字层 (SSL),则应将 EnableSsl 设置为true
//如果不写会报出421错误(服务不可用)
ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
//证书验证过程
#endregion
WebResponse response = ftp.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("\n");
line = reader.ReadLine();
}
result.Remove(result.ToString().LastIndexOf("\n"), 1);
reader.Close();
response.Close();
return result.ToString().Split('\n');
}
catch (Exception ex)
{
downloadFiles = null;
Console.WriteLine("{0}", ex.Message);
return downloadFiles;
}
}
#endregion