"Socket read operation has timed out" 异常 SSH.NET 连接到 FTP 端口 21 时
"Socket read operation has timed out" exception with SSH.NET when connecting to FTP port 21
当客户端尝试连接到 FTP 服务器时出现以下异常:
Socket read operation has timed out after 30000 milliseconds.
Source = "Renci.SshNet"
at Renci.SshNet.Abstractions.SocketAbstraction.Read(Socket socket, Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout)
at Renci.SshNet.Session.SocketReadLine(TimeSpan timeout)
at Renci.SshNet.Session.Connect()
at Renci.SshNet.BaseClient.Connect()
at SftpClient.ReadAllBytesAsync() in C:\SftpClient\SftpClient.cs:line 42
代码如下:
using (Renci.SshNet.SftpClient sftp = new Renci.SshNet.SftpClient(server,
21,
Username,
Password))
sftp.Connect(); //exception here
content = sftp.ReadAllBytes(FilePath);
sftp.Disconnect();
}
SSH.NET版本:2016.1.0
但是,它通过命令提示符通过如下所示的 telnet 连接:
telnet server_ip_address 21
220 (SFTPPlus_3.15.0) Welcome to the FTP/FTPS Service.
服务器端的工作人员向我发送 public 证书,我将其安装在 Windows 10 上。
有什么想法吗?
解决方法:
SSH.NET 是 SSH/SFTP 客户端(端口 22)。
您不能使用它连接到 FTP 服务器(端口 21)。 FTP和SFTP是两个完全不同的协议。
对于FTP,您可以使用:
FtpWebRequest
.NET framework class – see
- 或某些第 3 方 FTP 实施 – 例如 my WinSCP .NET assembly or FluentFTP.
FTP和SFTP是两个完全不同的协议。
For FTP server (Port 21), 你可以使用下面的代码:-
Example : Upload files using FtpWebRequest
string filename = "ftp://" + ip + "//" + "HA11062020CJEIC.pdf";
FtpWebRequest ftpReq = (FtpWebRequest)WebRequest.Create(filename);
ftpReq.UsePassive = false;
ftpReq.UseBinary = true;
ftpReq.Method = WebRequestMethods.Ftp.UploadFile;
ftpReq.Credentials = new NetworkCredential(username, password);
string sourceFile = @"C:\Users\*****\*****\FTP Schedular\HA11062020CJEIC.pdf";
byte[] b = File.ReadAllBytes(sourceFile); //Get local pc file
//var webClient = new WebClient(); //Get file from URL
//byte[] b = webClient.DownloadData(sourceFile);
ftpReq.ContentLength = b.Length;
using (Stream s = ftpReq.GetRequestStream())
{
s.Write(b, 0, b.Length);
}
FtpWebResponse ftpResp = (FtpWebResponse)ftpReq.GetResponse();
if (ftpResp != null)
{
string MessageBox = (ftpResp.StatusDescription);
}
当客户端尝试连接到 FTP 服务器时出现以下异常:
Socket read operation has timed out after 30000 milliseconds.
Source = "Renci.SshNet"
at Renci.SshNet.Abstractions.SocketAbstraction.Read(Socket socket, Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout) at Renci.SshNet.Session.SocketReadLine(TimeSpan timeout) at Renci.SshNet.Session.Connect() at Renci.SshNet.BaseClient.Connect() at SftpClient.ReadAllBytesAsync() in C:\SftpClient\SftpClient.cs:line 42
代码如下:
using (Renci.SshNet.SftpClient sftp = new Renci.SshNet.SftpClient(server,
21,
Username,
Password))
sftp.Connect(); //exception here
content = sftp.ReadAllBytes(FilePath);
sftp.Disconnect();
}
SSH.NET版本:2016.1.0
但是,它通过命令提示符通过如下所示的 telnet 连接:
telnet server_ip_address 21
220 (SFTPPlus_3.15.0) Welcome to the FTP/FTPS Service.
服务器端的工作人员向我发送 public 证书,我将其安装在 Windows 10 上。
有什么想法吗?
解决方法:
SSH.NET 是 SSH/SFTP 客户端(端口 22)。
您不能使用它连接到 FTP 服务器(端口 21)。 FTP和SFTP是两个完全不同的协议。
对于FTP,您可以使用:
FtpWebRequest
.NET framework class – see- 或某些第 3 方 FTP 实施 – 例如 my WinSCP .NET assembly or FluentFTP.
FTP和SFTP是两个完全不同的协议。
For FTP server (Port 21), 你可以使用下面的代码:-
Example : Upload files using FtpWebRequest
string filename = "ftp://" + ip + "//" + "HA11062020CJEIC.pdf";
FtpWebRequest ftpReq = (FtpWebRequest)WebRequest.Create(filename);
ftpReq.UsePassive = false;
ftpReq.UseBinary = true;
ftpReq.Method = WebRequestMethods.Ftp.UploadFile;
ftpReq.Credentials = new NetworkCredential(username, password);
string sourceFile = @"C:\Users\*****\*****\FTP Schedular\HA11062020CJEIC.pdf";
byte[] b = File.ReadAllBytes(sourceFile); //Get local pc file
//var webClient = new WebClient(); //Get file from URL
//byte[] b = webClient.DownloadData(sourceFile);
ftpReq.ContentLength = b.Length;
using (Stream s = ftpReq.GetRequestStream())
{
s.Write(b, 0, b.Length);
}
FtpWebResponse ftpResp = (FtpWebResponse)ftpReq.GetResponse();
if (ftpResp != null)
{
string MessageBox = (ftpResp.StatusDescription);
}