-
Доброго времени суток, форумчане! Излагаю суть проблемы: имею проект, обращающийся к 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 отключен, сторонний не используется. Прошу помочь советом: можно ли избавится от этих ошибок и что можно сделать в моем случае для установления соединения в случае появления вышеуказанных ошибок? Спасибо, что прочли вопрос. Если необходимо, выложу недостающие участки кода.
-
> что можно сделать в моем случае для установления соединения > в случае появления вышеуказанных ошибок?
ничего, эти ошибки не является ошибками программиста
-
ну разве что, ты не обращаешься на несуществующий сервер... или указал неверный порт...
-
Еще возник параллельный вопрос: как можно идентифицировать описанные ошибки? Пока ничего кроме сравнения e.Message со строками сообщений об ошибках, в голову не приходит. А, скажем, код ошибки можно получить? Что потом, например, можно было свои сообщения пользователю отображать в зависимости от типа возникшего исключения.
-
on e: Exception do ShowMessage(e.ClassName + ' ' + e.Message)
-
> Сергей М. © (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.
-
будь проще, прочитай справку про try/except on e:EIdConnectException do begin с какого перепугу классы исключений библиотеки Indy будут в SysUtils ?
-
> с какого перепугу классы исключений библиотеки Indy будут > в SysUtils ?
Спасибо! Я забыл подключить IdException...
A по теме ветки - ничего, кроме смены FTP-сервера, получается, в этой ситуации сделать нельзя?
-
> ничего, кроме смены FTP-сервера, получается, в этой ситуации > сделать нельзя?
А их у тебя разве косой десяток ?
Я так понимаю, что тебе требуется достучаться до какого-то конкретного, который "капризничает", а не до любого..
-
> А их у тебя разве косой десяток ?Я так понимаю, что тебе > требуется достучаться до какого-то конкретного, который > "капризничает", а не до любого..
Совершенно верно. Поэтому сейчас я и не знаю, что делать. Единственное достижение - это то, что ошибка 10061 перестала быть "плавающей". Сегодня - 100% попыток присоединиться к FTP-серверу завершились именно так. Что можно сделать в этой ситуации? Как проверить - "жив" еще сервер или нет? Как узнать - не сменили ли на днях у него порт доступа (21, как и убольшинства фтп-шников)?
-
> Как узнать - не сменили ли на днях у него порт доступа > (21, как и убольшинства фтп-шников)?
позвонить администратору сервера
-
> Как узнать - не сменили ли на днях у него порт доступа
Кроме сканирования активных портов с попыткой обращения к каждому найденному по ftp - никак.
> 100% попыток присоединиться к FTP-серверу завершились именно > так
Именно как ? С ошибкой 100061 ?
-
> позвонить администратору сервера
Юзаю бесплатный FTP-сервер, звонить, собственно, некому (
> Именно как ? С ошибкой 100061 ?
Нет. Текст по e.Message приходит следующий: Socket Error # 10061 Connection refused.
-
> Юзаю бесплатный FTP-сервер, звонить, собственно, некому > (
в каком смысле бесплатный? находящийся на каком'то хосте в интернете? что'ж тут удивлятся ошибкам...
-
> Connection refused
Верь глазам своим - попытка соединения отвергнута сервером.
А вот ошибка с кодом 100054 возникает уже после успешного коннекта, и она означает партнер по соединению закрыл соединение по своей инициативе, в момент когда ты осуществляешь попытку инф.обмена с ним.
-
> в каком смысле бесплатный? находящийся на каком'то хосте > в интернете? что'ж тут удивлятся ошибкам...
Именно так. К этому и относилась мысль, что видимо, придется перейти на какой-нибудь платный сервер. Хоть позвонить в случае чего будет кому... > Верь глазам своим - попытка соединения отвергнута сервером. > А вот ошибка с кодом 100054 возникает уже после успешного > коннекта, и она означает партнер по соединению закрыл соединение > по своей инициативе, в момент когда ты осуществляешь попытку > инф.обмена с ним.
Спасибо, я на MSDN'е расшифровку ошибок нашел. Не нашел только - что с этим теперь делать. Т. е. как достучаться до сервера, если он отклоняет соединения? В смысле, возможно ли это теоретически?
-
> Т. е. как достучаться до сервера, если он отклоняет соединения?
это типа "как же войти в дверь? а там какой то мужик меня не пускает" :)
-
> Michael (26.11.08 11:48) [15]
А сам хост-то, на котором работает ftp-сервер, доступен ? Ты его пинговал-трассировал ? И что говорит стандартный виндовый telnet-клиент по поводу попытки
open имя_или_адрес_хоста_с_FTP_сервером 21
?
-
> Michael (26.11.2008 11:24:12) [12]
Так ты хакер? Хакерам вход на сервер не разрешен.
-
> А сам хост-то, на котором работает ftp-сервер, доступен > ?
Да, доступен. Более того, я могу зайти на FTP-сервер через панель управления сайтом. Настройки никакие не менял, а "извне" достучаться стало невозможно.
> Так ты хакер? Хакерам вход на сервер не разрешен.
Что ж Вы так сразу? Я тут в поисках ответа книгу "Indy in depth" прочел...)))
|