Tclientsocket, если сокет не может подключиться

Я хочу, чтобы мои сокеты подключались к резервному хосту, когда сокет не может подключиться к хосту, я попробовал это:

if prclient.Socket.connected = false then
begin
prclient.Active := false;
prclient.Port := PORT;
prclient.Host := HOST;
prclient.Active := true;
prclient.Open;
sleep(500);
if prclient.Socket.Connected = false then
begin
prclient.Active := false;
prclient.Host := BACKUPHOST;
prclient.Active := true;
prclient.Open;
end;
end;

Но сейчас он вообще не подключается. Кто знает рабочий скрипт?

1 ответ

Решение

Если вы используете сокет в режиме блокировки, то оба Active:=True а также Open() (который вы НЕ ДОЛЖНЫ использовать вместе!) вызовет исключение, если соединение не установится:

prclient.Port := PORT;
prclient.Host := HOST;
try
  prclient.Open;
except
  prclient.Host := BACKUPHOST;
  prclient.Open;
end;

Если вы используете сокет в неблокирующем режиме, исключение не возникает (если только не работает функция API сокета), соединение выполняется в фоновом режиме, и вы будете уведомлены об окончательном результате через OnConnect или же OnError событие в зависимости от того, успешно или нет соединение, соответственно.

Другие вопросы по тегам