![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IdFTP - плавающие ошибки Socket Error # 10061 и 10054 [D7, WinXP]
Michael © (2008-11-25 22:27:00)Доброго времени суток, форумчане!
Излагаю суть проблемы: имею проект, обращающийся к FTP-серверу на основе компонента TIdFTP. До недавнего времени все работало. Вчера начали появляться плавающие ошибки Socket Error # 10061 и # 10054. Привожу место в листинге, где появляется ошибка:
// соединяемся
try
f_Main.IdFTP1.Connect;
except
on e: Exception do begin
// Это моя процедура отображения хода работы:
f_Main.SendToReport(etWarning, 'Соединение не установлено!' + ' Ошибка: ' + e.Message);
Exit;
end;
end;
Ошибка не является постоянной, иногда соединения проходят. Закономерность установить не удалось.
Искал в поисковиках по запросу "Socket Error # 10061".
На MSDN'е нашел расшифровку ошибок, где говорится, что
"10054 WSAECONNRESET ConnectionReset - Соединение было прервано удаленным компьютером;
10061 WSAECONNREFUSED ConnectionRefused - Соединение отклонено удаленным хостом. Это может произойти, если удаленный хост отключен или если он занят, а очередь запросов заполнена"
На тематических форумах нашел похожие проблемы, но в основном, связанные с TClient/ServerSocket. В основном советовалось проверить настройки брандмауэра или установить одинаковые порты на клиенте и сервере.
Брандмауэр Windows отключен, сторонний не используется.
Прошу помочь советом: можно ли избавится от этих ошибок и что можно сделать в моем случае для установления соединения в случае появления вышеуказанных ошибок?
Спасибо, что прочли вопрос. Если необходимо, выложу недостающие участки кода.
Palladin (2008-11-26 11:28:00) [21]
> Юзаю бесплатный FTP-сервер, звонить, собственно, некому
> (
в каком смысле бесплатный? находящийся на каком'то хосте в интернете? что'ж тут удивлятся ошибкам...
Michael (2008-11-26 11:24:00) [22]
> позвонить администратору сервера
Юзаю бесплатный FTP-сервер, звонить, собственно, некому (
> Именно как ? С ошибкой 100061 ?
Нет. Текст по e.Message приходит следующий: Socket Error # 10061
Connection refused.
Сергей М. (2008-11-26 11:16:00) [23]
> Как узнать - не сменили ли на днях у него порт доступа
Кроме сканирования активных портов с попыткой обращения к каждому найденному по ftp - никак.
> 100% попыток присоединиться к FTP-серверу завершились именно
> так
Именно как ? С ошибкой 100061 ?
Palladin (2008-11-26 11:15:00) [24]
> Как узнать - не сменили ли на днях у него порт доступа
> (21, как и убольшинства фтп-шников)?
позвонить администратору сервера
Michael (2008-11-26 11:04:00) [25]
> А их у тебя разве косой десяток ?Я так понимаю, что тебе
> требуется достучаться до какого-то конкретного, который
> "капризничает", а не до любого..
Совершенно верно. Поэтому сейчас я и не знаю, что делать. Единственное достижение - это то, что ошибка 10061 перестала быть "плавающей". Сегодня - 100% попыток присоединиться к FTP-серверу завершились именно так. Что можно сделать в этой ситуации? Как проверить - "жив" еще сервер или нет? Как узнать - не сменили ли на днях у него порт доступа (21, как и убольшинства фтп-шников)?
Сергей М. (2008-11-26 10:27:00) [26]
> ничего, кроме смены FTP-сервера, получается, в этой ситуации
> сделать нельзя?
А их у тебя разве косой десяток ?
Я так понимаю, что тебе требуется достучаться до какого-то конкретного, который "капризничает", а не до любого..
Michael (2008-11-26 09:47:00) [27]
> с какого перепугу классы исключений библиотеки Indy будут
> в SysUtils ?
Спасибо! Я забыл подключить IdException...
A по теме ветки - ничего, кроме смены FTP-сервера, получается, в этой ситуации сделать нельзя?
Palladin (2008-11-26 09:32:00) [28]будь проще, прочитай справку про try/except
on e:EIdConnectException do begin
с какого перепугу классы исключений библиотеки Indy будут в SysUtils ?
Michael (2008-11-26 09:15:00) [29]
> Сергей М. © (26.11.08 08:52) [4]
> on e: Exception do ShowMessage(e.ClassName + ' ' + e.Message)
Извините, если непонятно выразился в предыдущем посте. Объясню на примере. Сейчас дифференцировать ошибки приходится так:
on e: Exception do begin
if e.ClassName = 'EIdConnectException' then ...
что не кажется мне правильным. Тем более, не могу найти все значения ClassName'ов. Искал в SysUtils'ах, где описан класс Exception.
Сергей М. (2008-11-26 08:52:00) [30]on e: Exception do ShowMessage(e.ClassName + ' ' + e.Message)
Michael (2008-11-26 08:39:00) [31]Еще возник параллельный вопрос:
как можно идентифицировать описанные ошибки?
Пока ничего кроме сравнения e.Message со строками сообщений об ошибках, в голову не приходит. А, скажем, код ошибки можно получить? Что потом, например, можно было свои сообщения пользователю отображать в зависимости от типа возникшего исключения.
Palladin (2008-11-26 08:14:00) [32]
> что можно сделать в моем случае для установления соединения
> в случае появления вышеуказанных ошибок?
ничего, эти ошибки не является ошибками программиста
Palladin (2008-11-26 08:14:00) [33]ну разве что, ты не обращаешься на несуществующий сервер... или указал неверный порт...