• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Как избежать ошибки 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 года прошло) я удивился, но всё-таки решил ответить) закрыл бы тему хоть)
 
Мы в соцсетях:

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