改善WinSCP SCP连接时间

时间:2016-09-22 09:02:18

标签: c# scp winscp

我目前正尝试在C#中编写客户端代码,以便使用WinSCP将1kb文件传输到服务器。以下代码有效,但完整的过程大约需要11秒。代码需要10秒来协商连接并验证用户身份。实际的文件传输速度非常快。

Process winscp = new Process();
winscp.StartInfo.FileName = "winscp.com";
winscp.StartInfo.Arguments = "/xmllog=\"" + "sftp.txt" + "\"";
winscp.StartInfo.UseShellExecute = false;
winscp.StartInfo.RedirectStandardInput = true;
winscp.StartInfo.RedirectStandardOutput = true;
winscp.StartInfo.CreateNoWindow = true;
winscp.Start();

// Feed in the scripting commands
winscp.StandardInput.WriteLine("option batch abort");
winscp.StandardInput.WriteLine("option confirm off");

List<string> FtpCommands = new List<string>
{
    string.Format("open scp://{0}:{1}@{2}:22",CONNECTION_SFTP_USER,CONNECTION_SFTP_PASSWORD, CONNECTION_SFTP_IP),
    string.Format("put \"{0}\" /home/pi/progs/programs/{1}", file, program),
    "exit"
};

LogMessage("Sending ftp commands");
foreach (var ftpCommand in FtpCommands)
{
    LogMessage(ftpCommand);
    winscp.StandardInput.WriteLine(ftpCommand);
}

winscp.StandardInput.Close();

// Collect all output (not used in this example)
string output = winscp.StandardOutput.ReadToEnd();

// Wait until WinSCP finishes
winscp.WaitForExit();

我的代码是&#34;完整C#示例的编辑版本&#34;来自WinSCP网站
https://winscp.net/eng/docs/guide_dotnet#csharp_example

如果不编辑服务器,我是否可以进行任何更改以缩短传输时间?

1 个答案:

答案 0 :(得分:1)

使用SFTP协议(sftp://)。 WinSCP中的SCP协议具有较长的连接时间,因为WinSCP需要检查并调整环境以实现自动化。无论如何,SCP协议已经过时了。

如果您因某种原因确实需要使用SCP(似乎不是这种情况),您可以尝试禁用环境调整。

在任何情况下,请勿自行驾驶winscp.exe二进制文件。请改用WinSCP .NET assembly。它可以为您节省很多麻烦。即使the link你指向自己也暗示着这一点。