2016-09-22 9 views
1

현재 WinSCP를 사용하여 1kb 파일을 서버로 전송하기 위해 C#에서 클라이언트 코드를 작성하려고합니다. 다음 코드는 작동하지만 전체 절차에는 약 11 초가 소요됩니다. 이 코드는 연결을 협상하고 사용자를 인증하는 데 10 초가 걸립니다. 실제 파일 전송 속도는 매우 빠릅니다.WinSCP SCP 연결 시간 향상

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(); 

내 코드는 내가 전송 시간을 단축 할 수있는 변화가, 서버를 편집하지 않고 WinSCP에 웹 사이트
https://winscp.net/eng/docs/guide_dotnet#csharp_example

에서 "전체 C# 예제"의 편집 된 버전?

답변

1

SFTP 프로토콜 (sftp://)을 사용하십시오. WinSCP는 자동화가 가능하도록 환경을 확인하고 조정해야하기 때문에 WinSCP의 SCP 프로토콜은 연결 시간이 길다. 그리고 SCP 프로토콜은 어쨌든 쓸모가 없습니다.

어떤 이유로 든 SCP를 사용해야 할 경우 환경 조정을 비활성화 할 수 있습니다.

어쨌든 winscp.exe 바이너리를 직접 운전하지 마십시오. 대신 WinSCP .NET assembly을 사용하십시오. 그것은 당신에게 많은 번거 로움을 덜어줍니다. 심지어 the link 너 자신을 가리킨다.