Конференция "Сети" » IdFTP - плавающие ошибки Socket Error # 10061 и 10054 [D7, WinXP]
 
  • Michael (25.11.08 22:27) [0]
    Доброго времени суток, форумчане!
    Излагаю суть проблемы: имею проект, обращающийся к 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 © (26.11.08 08:14) [1]

    > что можно сделать в моем случае для установления соединения
    > в случае появления вышеуказанных ошибок?

    ничего, эти ошибки не является ошибками программиста
  • Palladin © (26.11.08 08:14) [2]
    ну разве что, ты не обращаешься на несуществующий сервер... или указал неверный порт...
  • Michael (26.11.08 08:39) [3]
    Еще возник параллельный вопрос:
    как можно идентифицировать описанные ошибки?
    Пока ничего кроме сравнения e.Message со строками сообщений об ошибках, в голову не приходит. А, скажем, код ошибки можно получить? Что потом, например, можно было свои сообщения пользователю отображать в зависимости от типа возникшего исключения.
  • Сергей М. © (26.11.08 08:52) [4]
    on e: Exception do ShowMessage(e.ClassName + ' ' + e.Message)
  • Michael (26.11.08 09:15) [5]

    > Сергей М. ©   (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.
  • Palladin © (26.11.08 09:32) [6]
    будь проще, прочитай справку про try/except

    on e:EIdConnectException do begin



    с какого перепугу классы исключений библиотеки Indy будут в SysUtils ?
  • Michael (26.11.08 09:47) [7]

    > с какого перепугу классы исключений библиотеки Indy будут
    > в SysUtils ?

    Спасибо! Я забыл подключить IdException...

    A по теме ветки - ничего, кроме смены FTP-сервера, получается, в этой ситуации сделать нельзя?
  • Сергей М. © (26.11.08 10:27) [8]

    > ничего, кроме смены FTP-сервера, получается, в этой ситуации
    > сделать нельзя?


    А их у тебя разве косой десяток ?

    Я так понимаю, что тебе требуется достучаться до какого-то конкретного, который "капризничает", а не до любого..
  • Michael (26.11.08 11:04) [9]

    > А их у тебя разве косой десяток ?Я так понимаю, что тебе
    > требуется достучаться до какого-то конкретного, который
    > "капризничает", а не до любого..

    Совершенно верно. Поэтому сейчас я и не знаю, что делать. Единственное достижение - это то, что ошибка 10061 перестала быть "плавающей". Сегодня - 100% попыток присоединиться к FTP-серверу завершились именно так. Что можно сделать в этой ситуации? Как проверить - "жив" еще сервер или нет? Как узнать - не сменили ли на днях у него порт доступа (21, как и убольшинства фтп-шников)?
  • Palladin © (26.11.08 11:15) [10]

    >  Как узнать - не сменили ли на днях у него порт доступа
    > (21, как и убольшинства фтп-шников)?

    позвонить администратору сервера
  • Сергей М. © (26.11.08 11:16) [11]

    > Как узнать - не сменили ли на днях у него порт доступа


    Кроме сканирования активных портов с попыткой обращения к каждому найденному по ftp - никак.


    > 100% попыток присоединиться к FTP-серверу завершились именно
    > так


    Именно как ? С ошибкой 100061 ?
  • Michael (26.11.08 11:24) [12]

    > позвонить администратору сервера

    Юзаю бесплатный FTP-сервер, звонить, собственно, некому (

    > Именно как ? С ошибкой 100061 ?

    Нет. Текст по  e.Message приходит следующий: Socket Error # 10061
    Connection refused.
  • Palladin © (26.11.08 11:28) [13]

    > Юзаю бесплатный FTP-сервер, звонить, собственно, некому
    > (

    в каком смысле бесплатный? находящийся на каком'то хосте в интернете? что'ж тут удивлятся ошибкам...
  • Сергей М. © (26.11.08 11:35) [14]

    > Connection refused


    Верь глазам своим - попытка соединения отвергнута сервером.

    А вот ошибка с кодом 100054 возникает уже после успешного коннекта, и она означает партнер по соединению закрыл соединение по своей инициативе, в момент когда ты осуществляешь попытку инф.обмена с ним.
  • Michael (26.11.08 11:48) [15]

    > в каком смысле бесплатный? находящийся на каком'то хосте
    > в интернете? что'ж тут удивлятся ошибкам...

    Именно так. К этому и относилась мысль, что видимо, придется перейти на какой-нибудь платный сервер. Хоть позвонить в случае чего будет кому...
    > Верь глазам своим - попытка соединения отвергнута сервером.
    > А вот ошибка с кодом 100054 возникает уже после успешного
    > коннекта, и она означает партнер по соединению закрыл соединение
    > по своей инициативе, в момент когда ты осуществляешь попытку
    > инф.обмена с ним.

    Спасибо, я на MSDN'е расшифровку ошибок нашел. Не нашел только - что с этим теперь делать. Т. е. как достучаться до  сервера, если он отклоняет соединения? В смысле, возможно ли это теоретически?
  • Palladin © (26.11.08 11:57) [16]

    > Т. е. как  достучаться до  сервера, если он отклоняет соединения?

    это типа "как же войти в дверь? а там какой то мужик меня не пускает" :)
  • Сергей М. © (26.11.08 11:58) [17]

    > Michael   (26.11.08 11:48) [15]


    А сам хост-то, на котором работает ftp-сервер, доступен ?
    Ты его пинговал-трассировал ?
    И что говорит стандартный виндовый telnet-клиент по поводу попытки

    open имя_или_адрес_хоста_с_FTP_сервером 21

    ?
  • Anatoly Podgoretsky © (26.11.08 13:26) [18]
    > Michael  (26.11.2008 11:24:12)  [12]

    Так ты хакер? Хакерам вход на сервер не разрешен.
  • Michael (26.11.08 14:19) [19]

    > А сам хост-то, на котором работает ftp-сервер, доступен
    > ?

    Да, доступен. Более того, я могу зайти на FTP-сервер через панель управления сайтом. Настройки никакие не менял, а "извне" достучаться стало невозможно.


    > Так ты хакер? Хакерам вход на сервер не разрешен.

    Что ж Вы так сразу? Я тут в поисках ответа книгу "Indy in depth" прочел...)))
 
Конференция "Сети" » IdFTP - плавающие ошибки Socket Error # 10061 и 10054 [D7, WinXP]
Есть новые Нет новых   [134435   +33][b:0][p:0.001]