Как избежать ошибки 10061 в сокетах

Тема в разделе "Delphi - Сети", создана пользователем Vadik(R), 31 окт 2008.

  1. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Опять тот же чат, которым я этот форум зафлудил :)
    Вобщем проблема такая: при попытке клиента подсоединиться к серверу вылетает ошибка 10061. Она вылетает из-за того, что не запущен сервер, это я знаю. Как можно убрать эту ошибку или вообще заменить текст сообщения на свой?
    Вот что пытался:
    Код (Text):
    procedure TForm1.FormCreate(Sender: TObject);
    var
    fl: boolean;
    begin
    fl:=true;
    while fl do
    begin
    Application.ProcessMessages;
    fl:=false;
    try
    ClientSocket1.Active:=True;
    except
    showmessage('Сервер пока не запущен. Попробуйте еще раз');
    fl:=true
    end
    end
    end;
    То есть я хочу, чтобы эта ошибка вовсе не показывалась и при ее возникновении попытаться опять подключиться к серверу. Хотелось бы также выдать какое-нибудь обнадеживающее сообщение :)
    Только не знаю, как сделать, надеюсь на вашу помощь.
    Заранее спасибо!
     
  2. etc

    etc Гость

    Вроде все сделано, что не так, или ошибка не тут? единственное, что - Попробуйте еще раз - тут наверное не к месту.

    И тут я бы влепил - repeat until цикл с Break-ом
     
  3. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Фух, наконец-то нашел, как это исправить. В общем в обработчике события onError надо написать ErrorCode:=0; ShowMessage('Не получилось. Попробуйте еще раз'); ClientSocket1.Active:=True; и всего-то! :)
     
  4. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Хотя нет, я вру, этим как выяснилось я только подавил сообщение об ошибке. А заново почему-то сокет не пытается создать соединение :)
    Вообщем, объясню по конкретней. Допустим я специально не запустил сервер. Клиент должен все равно пытаться подключиться. Но почему-то он один раз пытается подключится, а больше - не хочет. Он не реагирует на строчки в обработчике события ошибок следующих за errorcode:=0;
    Или надо как-то по-другому заставить сокет подключаться вновь. Тока я не знаю как :blushed:
     
  5. Senset

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    ответ спустя четыре года))) тема не закрыта... в общем создай таймер в socket error активируй его, в самом таймере проверяй было ли выполнено подключение. ставишь таймер на 1 сек, и вуаля он будет ломиться в не созданный сервер каждую секунду пока его не найдет... но через какое-то время появятся ошибки (тысяки этак через 3 подключений) связанных с переполнением буфера сокета... исправляется это:
    1) в настройках винды (читай форумы другие когда натолкнешься на такую ошибку) (но лучше так винду не мучать)
    2) рестартом программы
     
  6. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Senset, именно вторым способом и решил проблему.
    Давно, а не только что :please:
     
  7. Senset

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    понятное дело, 4 года прошло) я удивился, но всё-таки решил ответить) закрыл бы тему хоть)
     
Загрузка...

Поделиться этой страницей