• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы Vadik(R)
  • Дата начала
V

Vadik(R)

Опять тот же чат, которым я этот форум зафлудил :)
Вобщем проблема такая: при попытке клиента подсоединиться к серверу вылетает ошибка 10061. Она вылетает из-за того, что не запущен сервер, это я знаю. Как можно убрать эту ошибку или вообще заменить текст сообщения на свой?
Вот что пытался:
Код:
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;
То есть я хочу, чтобы эта ошибка вовсе не показывалась и при ее возникновении попытаться опять подключиться к серверу. Хотелось бы также выдать какое-нибудь обнадеживающее сообщение :)
Только не знаю, как сделать, надеюсь на вашу помощь.
Заранее спасибо!
 
E

etc

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

И тут я бы влепил - repeat until цикл с Break-ом
 
V

Vadik(R)

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

Vadik(R)

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

Senset

ответ спустя четыре года))) тема не закрыта... в общем создай таймер в socket error активируй его, в самом таймере проверяй было ли выполнено подключение. ставишь таймер на 1 сек, и вуаля он будет ломиться в не созданный сервер каждую секунду пока его не найдет... но через какое-то время появятся ошибки (тысяки этак через 3 подключений) связанных с переполнением буфера сокета... исправляется это:
1) в настройках винды (читай форумы другие когда натолкнешься на такую ошибку) (но лучше так винду не мучать)
2) рестартом программы
 
V

Vadik(R)

Senset, именно вторым способом и решил проблему.
Давно, а не только что :please:
 
S

Senset

понятное дело, 4 года прошло) я удивился, но всё-таки решил ответить) закрыл бы тему хоть)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!