В настоящее время я использую FTP-сервер FileZilla в сети. Моя проблема заключается в том, что на казалось бы случайных машинах, когда пользователь переходит в каталог (что он может сделать) и пытается выполнить ls (т.е. передачу данных), его конец зависает в ожидании ответа, в то время как сервер сообщает об этом 425: Can't open data connection for transfer
упомянутом над. Этот результат варьируется в зависимости от используемого клиентского компьютера, где некоторые (локальные или удаленные) могут продолжить работу, а другие застряли здесь. Я понимаю, что это потому, что простые команды FTP, такие как CWD
ing, работают на портах 20/21, тогда как передача данных FTP работает на каком-то другом номере порта, который, в свою очередь, может быть заблокирован брандмауэром где-то в цепочке. Мой вопрос заключается в том, как мне учесть эти разные порты (если это действительно проблема), поскольку, насколько я знаю, они могут быть выше 1024?
Моя конечная цель в этом проекте - реализовать очень простое решение FTP, в идеале использующее Win INet, однако, до сих пор я столкнулся с той же проблемой:
BOOL CWebFileFinder::FindFile(const CString& URL)
{
CString ServerName;
CString strObject;
INTERNET_PORT nPort;
DWORD dwServiceType = AFX_INET_SERVICE_FTP;
if (AfxParseURL(URL, dwServiceType, ServerName, strObject, nPort))
{
m_Connection = m_Session.GetFtpConnection(ServerName, m_Username, m_Password, nPort/*, true*/); // results in findfile still failing
if (m_Connection)
{
m_Connection->SetCurrentDirectory("sms"); // CDs into this dir
m_Finder = new CFtpFileFind(m_Connection);
if (m_Finder)
{
More = m_Finder->FindFile(_T("*.*")); // hangs here
}
}
}
catch (CException* pEx)
{
CString str;
LPTSTR error = str.GetBuffer(255);
pEx->GetErrorMessage(error, 255);
pEx->Delete();
str.ReleaseBuffer();
}
return More;
}
Насколько я вижу, либо мне нужно позвонить, чтобы открыть этот порт данных до LIST
или найдите брандмауэры, блокирующие эти порты, и создайте правило для предотвращения этого ( Какие порты Win inet прослушивает для активного подключения к данным FTP? ). Конечно, я мог бы также быть совершенно не в себе - любая идея была бы очень оценена!