Delphi ошибка 10061

 
vadim1 ©
 
(2006-03-23 05:08)
[0]

Господа! Доброго Вам времени суток!
Заранее прошу прошения за дилетантский вопрос — но уж очень меня с ним «припекло» :)
Использую на 2-х компах ServerSocket и ClientSocket соответственно
Все плпытки установить соединение заканчиваются ошибкой «Asynchronous socket error 10061». Сколько я ни игрался с портами — результат отсутствовал Но стоило мне заменить программы установленные на компах на простенькие примерчики из Help — всё заработало на славу!
 В коде бегущем на обоих компах имеется только по одному (!) элементу ClientSocket и ServerSocket и по одному-единственному обращению к ним При этом сам код этих обращений точно такой же как  в упомянутых примерах
Что может явится причиной столь удручающего поведения ?
 Буду очень признателен за любую помощь


 
Сергей М. ©
 
(2006-03-23 08:06)
[1]

Приведи свой вариант неработающего кода


 
vadim14
 
(2006-03-23 10:32)
[2]

Сервер:
 procedure TForm1.FormCreate(Sender: TObject);
begin
 ServerSocket1.Port := 1001;//чёрт знает ,сколько портов перепробовал!
 ServerSocket1.Active := TRUE;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 Edit1.Text := Socket.ReceiveText;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 ServerSocket1.Close;
end;

Клиент:
procedure TForm1.FormCreate(Sender: TObject);
begin
 ClientSocket1.Port :=  23;
  ClientSocket1.Host :=  «192.168.1.5; //испробовал и имя Хоста тоже!
 ClientSocket1.Active :=  true;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 ClientSocket1.Active := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if ClientSocket1.Active then
   ClientSocket1.Socket.SendText(Edit1.Text);
end;

Казалось бы : куда уж проще?! Так вот — в чистом виде пример работает а как «довесок» к программе в которой повторяю других операций с сетью нет — НИ ВКАКАКУЮ ! :(


 
vadim14
 
(2006-03-23 10:38)
[3]

Sorry! Что-то я с никами запутался! Был Vadim1 а стал почему-то Vadim14! :)


 
Сергей М. ©
 
(2006-03-23 11:06)
[4]


> ClientSocket1.Port :=  23;

Почему 23-то, когда сервер на самом деле слушает на 1001-м порту ?

Св-во Port и у клиента и у сервера д.б. одинаково !


 
vadim14
 
(2006-03-23 12:17)
[5]

Это опечатка! На самом деле в коде установки правильные,просто перед тем как послать вопрос я очередной раз их пытался менять и меня отвлекли! :) Прошу прощшения,однако проблема,к сожалению,не в этом…


 
Сергей М. ©
 
(2006-03-23 12:42)
[6]


> vadim14   (23.03.06 12:17) [5]

Ошибка с кодом 10061 может возникнуть

только

в случае, если хост доступен, но целевой порт на нем не активен (не открыт).


 
Сергей М. ©
 
(2006-03-23 12:43)
[7]

Либо если сервер отверг попытку подключения клиента, но это не твой случай.


 
vadim14
 
(2006-03-23 13:02)
[8]

«Ошибка с кодом 10061 может возникнуть только в случае, если хост доступен, но целевой порт на нем не активен (не открыт).»

Так я же перепробовал штук 10 разных портов!
И потом в программе я больше нигде к сети не обращаюсь — то есть вроде как «забивать» порты нечем…


 
Сергей М. ©
 
(2006-03-23 13:19)
[9]


> Так я же перепробовал штук 10 разных портов!

Да хоть 10 000 !

Еще раз повторяю : ошибку с кодом 10061 может вернуть только операция коннекта (читай описание кодов отказа ф-ции connect в справке MS WinSock2 Reference или в MSDN), и связана она именно с вышеуказанными условиями !

Ты может св-во Service где-то назначил у сервера или у клиента ?


 
Сергей М. ©
 
(2006-03-23 13:26)
[10]


> «забивать» порты

Да и что значит «забивать» ?


 
vadim14
 
(2006-03-23 15:57)
[11]

«Ты может св-во Service где-то назначил у сервера или у клиента «
 Да нет

«Да и что значит «забивать» ?»
Ну то есть никто их больше не использует! :)


 
Сергей М. ©
 
(2006-03-23 16:09)
[12]


> Ну то есть никто их больше не использует

Если бы их кто-то еще использовал, попытка установить св-во ServerSocket.Active привела бы к исключению.

Раз исключения не было, значит сервер был успешно активизирован на таком-то порту.

Попробуй активировать сервер и подключиться к нему средствами стандартной telnet-консоли:

telnet open 192.168.1.5 номер_того_самого_порта

Успешное подключение в этом случае говорит о «кривизне» твоего клиента.


 
vadim1 ©
 
(2006-03-23 23:08)
[13]

Telnet не работает,но зато приведённый пример (без собственно программы) отлично «контачит»…


 
Сергей М. ©
 
(2006-03-24 08:17)
[14]


> приведённый пример (без собственно программы) отлично «контачит».

Ничего не понял ..

Какой такой «приведенный пример .. контачит» ? Который в [2] ?
Но ты же сам говоришь что он «не контачит» ?

Что за «собственно программа» ?

«Приведенный пример» — это что, не программа ? А что же тогда это ?!


 
vadim1 ©
 
(2006-03-25 21:37)
[15]

Спасибо за помощь! Я уже разобрался! В программе присутствовал фрагмент который просто перегружал несчатный комп а сеть как раз и послужила индикатором
 !
А приведённый код — всего лишь маленькая добавка к этой самой самой проге,коя (добавка :) ) отлично работала — но только сама по себе :)))
Ещё раз большое спасибо!


Как, при подключении клиента, если сервер не запущен, отловить системную ошибку и выдать сообщение о недоступности сервера? Перерыр гугл, но конструкция Try..Except не работает, как и Try..Except on E:Exception do. Или как проверить доступность сервера тогда? Код, который использовал, ниже: (событие об ошибке работает, но и системная ошибка также выдается, что логично)

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp;
type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
//клик на кнопку
procedure TForm1.Button1Click(Sender: TObject);
begin
  Try
    ClientSocket1.Open;
  Except
    On E : Exception do Label1.Caption:='Ошибка подключения';
  End;
end;
//при ошибке
procedure TForm1.ClientSocket1Error(Sender: TObject;
 Socket:TCustomWinSocket; ErrorEvent: TErrorEvent;var ErrorCode: Integer);
begin Label1.Caption:='Ошибка';end;

end.

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    !
    Соблюдайте общие правила форума

    Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
    Указывайте точные версии Delphi и используемых сетевых библиотек.

    Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.


    Внимание:
    попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
    Повторная попытка — 60 дней. Последующие попытки бан.
    Мат в разделе — бан на три месяца…


    Полезные ссылки:
    user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


    Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

    >
    Опять TClientSocket и Asynchronous socket error 10061

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,

      Пишу клиент мелкий но надо использовать потоковые функции

      Надо обойти ненавистную ошибку ?когда к серверу не может достучаться

      Всегда помогало type=ctNonBlocking, обработчик в OnError и в конце ErrorCode:=0

      но в этот раз надо писать и читать не с помощью onRead,onWrite,а стримами и соответственно type=ctNonBlocking нельзя

      Так вот как бы не выставлял ErrorCode:=0 все равно выскакиевает ошибка во время работы программы:(
      Как только ставлю в Blocking ошибка исчезает, но как только начинаю читать или писать вылазит Socket Must be in blocking mode

      Уважаемые гуру, прошу помощи

      использую Delphi 2007


      Oleg2004



      Сообщ.
      #2

      ,

        Вообще то эта ошибка как бы к коду не относится :huh: :

        Цитата

        WSAECONNREFUSED (10061) В подключении отказано – на хосте партнера не
        работает программа запрашиваемого сервиса


        medved_68



        Сообщ.
        #3

        ,

          Цитата Oleg2004 @

          Вообще то эта ошибка как бы к коду не относится :

          Почему? Очень даже относится. Если бы он не активировал сокет — то и такой ошибки бы не было!!! :D начинающий, сия ошибка вылезет при отказе в установке соединения только в блокирующем режиме когда сервер, на который «стучишься» не активен. :) ErrorCode здесь бесполезен т.к. в блокирующем режиме обработка операций на сокете линейна, а не асинхронна и такого события, как впрочем и onRead, onWrite попросту не возникнет. Соответственно, попытки принудительно выполнить данные процедуры приведут к отказу в доступе, что впрочем и наблюдается.

          Цитата начинающий @

          но в этот раз надо писать и читать не с помощью onRead,onWrite,а стримами и соответственно type=ctNonBlocking нельзя

          Рекомендую посмотреть в сторону TWinSocketStream, а чтобы ошибка при коннекте не «вылазила» (если сервер не активен) — все операции на сокете заключить в блок try…except, где в секции except вызовом WSAGetLastError узнавать код ошибки, вызвавшей исключение, подавлять ее и выдавать пользователю свое сообщение (при необходимости) или предпринимать какие то другие действия. :)


          Oleg2004



          Сообщ.
          #4

          ,

            Цитата medved_68 @

            Почему? Очень даже относится.

            Я бы не был столь категоричным :D Это ошибка на стороне партнера по сети — а не в программе :D
            Эта ошибка выскакивает на любой работающей клиентской программе — на любом броузере и тд — если в доступе отказано — и от типа сокета, на котором работает соединение, она категорически не зависит :no:


            medved_68



            Сообщ.
            #5

            ,

              Цитата Oleg2004 @

              Это ошибка на стороне партнера по сети — а не в программе

              Цитата Oleg2004 @

              и от типа сокета, на котором работает соединение, она категорически не зависит

              Спорить было бы глупо. :D Я упомянул только блокирующий режим потому что у автора при попытках выполнить операции чтения и записи выдавался отказ в доступе. :huh:

              Цитата Oleg2004 @

              Я бы не был столь категоричным

              Цитата medved_68 @

              Почему? Очень даже относится. Если бы он не активировал сокет — то и такой ошибки бы не было!!!

              :D Отсюда и «категоричность». :D

              Сообщение отредактировано: medved_68


              начинающий



              Сообщ.
              #6

              ,

                спасибо, обыграл ситуацию с try … except …

                что-то типа такого

                ExpandedWrap disabled

                   Client.Address:=ServerIpCombo.Text;

                    ServerConnection:=0;

                    i:=0;

                    while ((ServerConnection<>1) and (i<20)) do

                    begin

                      try

                        Client.Open;

                        ServerConnection:=1;

                      except

                        on Exception do

                        begin

                          ServerConnection:=-1;

                          inc(i);

                          Sleep(200);

                          Application.ProcessMessages;

                        end;

                      end;

                    end;

                   if (ServerConnection<>1)  then

                   begin

                   MemoLog.Lines.Add(‘No server connection’);

                   Exit;

                   end;

                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                0 пользователей:

                • Предыдущая тема
                • Delphi: Сетевое программирование
                • Следующая тема

                Рейтинг@Mail.ru

                [ Script execution time: 0,0244 ]   [ 16 queries used ]   [ Generated: 21.09.23, 09:55 GMT ]  

                Для программистов, которые работают с сокетами, сталкиваться с ошибками, связанными с асинхронным оперированием с ними, достаточно часто. Одним из таких сообщений об ошибках является Asynchronous socket error 10061 Delphi. В данном материале мы разберемся, почему возникает данная ошибка и как ее можно исправить.

                Asynchronous socket error 10061 Delphi: что это за ошибка?

                Asynchronous socket error 10061 Delphi – это сообщение об ошибке, которое появляется, когда приложение не может установить соединение с удаленным хостом. Как правило, данная ошибка появляется при работе с сокетами в режиме клиент-сервер, когда клиент не может подключиться к серверу.

                Причины возникновения ошибки

                Существует несколько причин, почему при работе с сокетами в Delphi может возникнуть ошибка Asynchronous socket error 10061. Рассмотрим их подробнее.

                1. Неправильно указан адрес сервера

                Одной из основных причин, почему не удается подключиться к серверу, является ошибочно указанный IP-адрес или порт сервера. Если IP-адрес указан неверно, сокет не сможет установить соединение с сервером. Кроме того, если порт сервера занят или указан неверно, то также может появиться ошибка Asynchronous socket error 10061 Delphi.

                2. Не открыты права на доступ к порту

                Другой причиной ошибки может стать отсутствие доступа к порту. Если у пользователя нет прав на доступ к порту, то сокет не сможет установить соединение с сервером и появится Asynchronous socket error 10061.

                3. Неправильно настроен процесс подключения

                В некоторых случаях ошибка может появляться из-за неправильно настроенного процесса подключения. Например, если клиент отправляет запрос на подключение к серверу, но не ожидает ответа от сервера, то он будет продолжать пытаться подключиться, несмотря на наличие ошибки.

                Решение проблемы

                Чтобы решить проблему с Asynchronous socket error 10061 Delphi, необходимо выполнить несколько действий.

                1. Проверить правильность указания IP-адреса и порта сервера

                Если сокет не может подключиться к серверу, то первым делом необходимо убедиться, что IP-адрес и порт указаны верно. Если ошибки нет, то следует проверить, не занят ли порт сервером.

                2. Убедиться, что права на доступ к порту открыты

                Если IP-адрес и порт указаны верно, то можно проверить, открыты ли права на доступ к порту. Для этого необходимо выполнить команду в командной строке:

                netstat -a

                Если порт открыт, то будет выведен список соединений. Если порт закрыт, то следует проверить настройки защиты и правильность работы брандмауэра.

                3. Проверить настройки процесса подключения

                Если причина ошибки связана с неправильно настроенным процессом подключения, то необходимо убедиться, что клиент ожидает ответа от сервера на свой запрос на подключение.

                Вывод

                Asynchronous socket error 10061 Delphi – это довольно распространенная ошибка, которая появляется при работе с сокетами в режиме клиент-сервер. Чтобы избежать данной ошибки, необходимо правильно указать IP-адрес и порт сервера, открыть доступ к порту и правильно настроить процесс подключения. Если все настройки приведены в порядок, то ошибка должна исчезнуть и приложение должно успешно установить соединение с сервером.

                deeller

                39 / 39 / 4

                Регистрация: 20.04.2011

                Сообщений: 789

                Записей в блоге: 1

                1

                02.09.2011, 16:58. Показов 9108. Ответов 4

                Метки нет (Все метки)


                Студворк — интернет-сервис помощи студентам

                Delphi
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
                13
                14
                15
                16
                17
                18
                19
                20
                21
                22
                23
                24
                25
                26
                27
                
                procedure TMyThread.ToLog;
                begin
                  if isalive then
                    Form1.Memo1.Lines.Add(host + ' at port ' + IntToStr(port) + ' is alive')
                  else
                    Form1.Memo1.Lines.Add(host + ' at port ' + IntToStr(port) + ' is NOT alive');
                end;
                 
                procedure TMyThread.Execute;
                var
                  IdTCPClient: TIdTCPClient;
                begin
                  isalive := False;
                  FreeOnTerminate := True;
                    IdTCPClient := TIdTCPClient.Create(nil);
                    IdTCPClient.Host := host;
                    IdTCPClient.Port := port;
                    try
                      IdTCPClient.Connect;
                      if IdTCPClient.Connected then
                        isalive := True
                    except
                      isalive := False;
                    end;
                    Synchronize(ToLog);
                    IdTCPClient.Free;
                end;

                есть вот две процедурки позволяющие «прозвонить» сервер и записать логи, собсно по логике вещей пр недоступности порта у конкретного сервера должна внестись соответствующая запись,а на деле выскакивает ошибка socket error 10061 подскажит в чем может быть дело?



                0



                Фрилансер

                Эксперт С++

                5845 / 1226 / 499

                Регистрация: 23.11.2010

                Сообщений: 3,375

                Записей в блоге: 1

                02.09.2011, 20:41

                2

                Фаерволы отключены?



                0



                Добрый самаритянин

                1107 / 622 / 139

                Регистрация: 31.03.2009

                Сообщений: 2,567

                02.09.2011, 20:43

                3

                Будьте добры выложите полный текст ошибки.



                0



                Эксперт С++

                3070 / 1408 / 425

                Регистрация: 19.01.2009

                Сообщений: 3,861

                03.09.2011, 01:01

                4

                Цитата
                Сообщение от John_Pa9JIbHuK
                Посмотреть сообщение

                Будьте добры выложите полный текст ошибки.

                John_Pa9JIbHuK, это же

                WSAECONNREFUSED

                «Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение»

                .



                1



                39 / 39 / 4

                Регистрация: 20.04.2011

                Сообщений: 789

                Записей в блоге: 1

                07.09.2011, 10:54

                 [ТС]

                5

                прошу прощения трабл был в фаерволе



                0



                Понравилась статья? Поделить с друзьями:

                Интересное по теме:

              • Delphi обратное распространение ошибки
              • Delphi отловить ошибку
              • Delphi не показывает ошибки
              • Delphi вывести сообщение об ошибке
              • Dem p188914 volvo xc90 ошибка

              • 0 0 голоса
                Рейтинг статьи
                Подписаться
                Уведомить о
                guest

                0 комментариев
                Старые
                Новые Популярные
                Межтекстовые Отзывы
                Посмотреть все комментарии