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
событие в зависимости от того, успешно или нет соединение, соответственно.