2017-07-14 16 views
0

我想用C#做一个到FileZilla服务器的FTPS连接,但C#应用程序从不登录到服务器,服务器关闭连接,并收到以下错误C#:C#FTP显式SSL请求从不登录

The underlying connection was closed: The server committed a protocol violation. 

我的C#代码是像这样:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 
var req = (FtpWebRequest)WebRequest.Create("ftp://<my IP>:<my port>/"); 
req.UsePassive = true; 
req.UseBinary = true; 
req.EnableSsl = true; 
req.KeepAlive = true; 
req.Credentials = new NetworkCredential("Puff", "Daddy"); 
req.Method = WebRequestMethods.Ftp.ListDirectory; 
using (var response = (FtpWebResponse)req.GetResponse()) 
{ 
    //Do Something 
} 

在一个连接尝试的FileZilla Server接口打印如下:

FileZilla Log

C#的网络日志中读取,像这样:

System.Net.Sockets Verbose: 0 : [6424] Socket#54135081::Socket(AddressFamily#23) 
System.Net.Sockets Verbose: 0 : [6424] Exiting Socket#54135081::Socket() 
System.Net.Sockets Verbose: 0 : [6424] DNS::TryInternalResolve(<FTP Server IP>) 
System.Net.Sockets Verbose: 0 : [6424] Socket#5773521::Connect(<FTP Server IP>:<FTP Port>#-1925092664) 
System.Net.Sockets Information: 0 : [6424] Socket#5773521 - Created connection from <local IP>:61169 to <Server IP>:<Server Port>. 
System.Net.Sockets Verbose: 0 : [6424] Exiting Socket#5773521::Connect() 
System.Net.Sockets Verbose: 0 : [6424] Socket#54135081::Close() 
System.Net.Sockets Verbose: 0 : [6424] Socket#54135081::Dispose() 
System.Net.Sockets Verbose: 0 : [6424] Exiting Socket#54135081::Close() 
System.Net Information: 0 : [6424] FtpControlStream#63094882 - Created connection from <Local IP>:61169 to <Server IP>:<Server Port>. 
System.Net Information: 0 : [6424] Associating FtpWebRequest#59817589 with FtpControlStream#63094882 
System.Net.Sockets Verbose: 0 : [6424] Socket#5773521::Receive() 
System.Net.Sockets Verbose: 0 : [6424] Data from Socket#5773521::Receive 
System.Net.Sockets Verbose: 0 : [6424] 00000000 :             : 
System.Net.Sockets Verbose: 0 : [6424] Exiting Socket#5773521::Receive() -> Int32#0 
System.Net.Sockets Verbose: 0 : [6424] Socket#5773521::Dispose() 
System.Net Information: 0 : [6424] FtpWebRequest#59817589::(Releasing FTP connection#63094882.) 
System.Net Error: 0 : [6424] Exception in FtpWebRequest#59817589::GetResponse - The underlying connection was closed: The server committed a protocol violation. 

我已经成功地与来自同一台电脑与FileZilla的客户端相同的参数的连接,所以我知道它应该工作。

我已将这些行添加到App.Config。

<system.net> 
    <settings> 
    <servicePointManager expect100Continue="false"/> 
    <httpWebRequest useUnsafeHeaderParsing="true"/> 
    </settings> 
</system.net> 

我也试过针对.NET Framework 3.5和2.0,但都有相同的结果。目前我正在运行.NET 4.6。我必须安装服务器证书还是什么?或者是代码错误?

回答

1

我发布这个问题后约2分钟,答案就来了。如果其他人有这些挣扎,我会放弃它(我有时候喜欢接受某人认同我的问题的想法,但不太可能)。

在FileZilla服务器上的“FTP over TLS settings”对话框中,我配置了一个侦听隐式FTP或TLS(默认值为990)的端口。这是我在FZ Client FTPS连接中使用的端口。我也试图从C#中使用这个端口,这是行不通的,因为连接是显式的FTPS。我不得不使用常规设置中指定的端口作为侦听端口(默认值为21)。

在发布问题之前,我实际上已经尝试过,但忘了应用路由器的配置,因此无法正常工作,“Der”。