我目前正尝试在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
如果不编辑服务器,我是否可以进行任何更改以缩短传输时间?
答案 0 :(得分:1)
使用SFTP协议(sftp://
)。 WinSCP中的SCP协议具有较长的连接时间,因为WinSCP需要检查并调整环境以实现自动化。无论如何,SCP协议已经过时了。
如果您因某种原因确实需要使用SCP(似乎不是这种情况),您可以尝试禁用环境调整。
在任何情况下,请勿自行驾驶winscp.exe
二进制文件。请改用WinSCP .NET assembly。它可以为您节省很多麻烦。即使the link你指向自己也暗示着这一点。