Мое решение. Строка должна быть изменяемой. Преимущество выше некоторых из других решений, что это перемещает часть непространства в начало, таким образом, можно продолжать использовать старый указатель, в случае, если необходимо освободить () его позже.
void trim(char * s) {
char * p = s;
int l = strlen(p);
while(isspace(p[l - 1])) p[--l] = 0;
while(* p && isspace(* p)) ++p, --l;
memmove(s, p, l + 1);
}
Эта версия создает копию строки с strndup () вместо того, чтобы редактировать его на месте. strndup () требует _GNU_SOURCE, поэтому возможно, необходимо сделать собственный strndup () с malloc () и strncpy ().
char * trim(char * s) {
int l = strlen(s);
while(isspace(s[l - 1])) --l;
while(* s && isspace(* s)) ++s, --l;
return strndup(s, l);
}
насколько мне известно, текущая (.NET 2.0 и 3.5) версия FtpWebRequest поддерживает только явный SSL.
На самом деле, .NET 2.0 в настоящее время не поддержка неявного SSL, только явного. Мы рассмотрим добавление этого для будущая версия.
JonCole - MSFTModerator на Сообщение на форуме MSDN
Если вам нужно использовать как неявный, так и явный TLS / SSL, вы должны попробовать один из сторонних компонентов FTP / SSL. Следующий код использует наш Rebex FTP / SSL и взят из учебной страницы .
Явный TLS / SSL
Клиент подключается к FTP-серверу обычным незащищенным способом , обычно порт 21 был назначен протоколу FTP. Когда желательно защитить соединение с помощью SSL, инициализируется согласование SSL, контрольное соединение защищено, и все последующие коммуникации защищаются.
// Create an instance of the Ftp class.
Ftp ftp = new Ftp();
// Connect securely using explicit SSL.
// Use the third argument to specify additional SSL parameters.
ftp.Connect(hostname, 21, null, FtpSecurity.Explicit);
// Connection is protected now, we can log in safely.
ftp.Login(username, password);
Явная защита означает, что можно защитить соединение в любой момент. Если вы не знаете, нужна ли вам защита не во время подключения, возможно, вы захотите подключиться с помощью обычного незашифрованного протокола FTP и защитить соединение позже.
Ftp ftp = new Ftp();
// Connect to the server with no protection.
ftp.Connect(hostname, 21);
// Upgrade connection to SSL.
// This method also accepts an argument to specify SSL parameters.
ftp.Secure();
// Connection is protected now, we can log in safely.
ftp.Login(username, password);
Неявная защита SSL сеанса FTP
Протокол FTPS изначально был назначен отдельным портом IANA. При подключении к этому порту немедленно начинается согласование SSL, и управляющее соединение защищается. Таким же образом неявно защищены все подключения к данным. Это похоже на подход, используемый HTTPS.
Этот подход не одобряется IETF и считается устаревшим. Он поддерживается Rebex FTP / SSL для взаимодействия со старыми серверами, но настоятельно рекомендуется по возможности использовать явную защиту.
Ftp ftp = new Ftp();
// Connect securely using implicit SSL.
// Use the third argument to specify additional SSL parameters.
ftp.Connect(hostname, 990, null, FtpSecurity.Implicit);
// Connection is protected now, we can log in safely.
ftp.Login(username, password);
Вы можете загрузить компонент по адресу rebex.net/ftp-ssl. net /
Ранее я использовал Alex FTPS Client. Возможно, вам стоит посмотреть http://ftps.codeplex.com/
edtFTPnet / PRO - это клиентская библиотека FTP, которая также поддерживает неявные и явные режимы FTPS. Это просто вопрос указания правильного протокола:
SecureFTPConnection conn = new SecureFTPConnection();
conn.Protocol = FileTransferProtocol.FTPSImplicit;
// set remote host, user, pwd etc ...
// now connect
conn.Connect();
Тот же компонент также поддерживает SFTP.
И да, я являюсь одним из разработчиков этого компонента (и edtFTPnet , бесплатного FTP-клиента .NET с открытым исходным кодом).