У меня проблема с IdTCPclient.connected функцией из Indy в Delphi.Я использую среду Indy10 и Delphi2010.Моя проблема - каждый раз, когда я проверяю TCP-соединение с IdTCPclient.connected , возникает исключение с этими ошибками EidSocketError , EidReadTimeOut .Есть ли способ отключить и снова подключить соединение?(как сбросить соединение).
Примечание. Я установил TCPClient.ReTimeout: = 30000;
. Применяется следующая кодировка для сброса соединения.
if IdTCPclient.connected then
begin
IdTCPclient.IOHandler.InputBuffer.Clear;
IdTCPclient.Disconnect;
end;
sleep(1000);
try
IdTCPclient.connect;
except
on E: Exception do
MessageDlg('Connecting Error: '+E.Message, mtError, [mbOk], 0);
end;
Но в какой-то момент я получаю исключение иэто не могло соединиться вообще.Я не уверен, что я делаю неправильно.
Должен ли я сделать это?
- Сначала отключить
- Очистить буфер ввода
- Уничтожить TCPclient
- Пересоздайте новый TCPclient
- И затем подключите его снова
Если это так, может кто-нибудь предоставить мне способ, как это сделать правильно?
Также в моей кодировке есть еще одна функция для повторного подключения TCP.Это также дает мне исключение.Я проверяю соединение, прежде чем отправить сообщение в TCP.Если нет соединения, я воссоединяюсь пять раз.
result := IdTCPclient.connected
if not result then
begin
for k:=0 to 4 do
beign
sleep(1000);
try
TCPclient.connect;
except
on E: Exception do
MessageDlg('Connecting Error: '+E.Message, mtError, [mbOk], 0);
end
result := TCPclient.connected;
if result then break;
end;
При наличии двух кодировок программа довольно хорошо справляется с повторным подключением и сбросом подключения.Но в какой-то момент программа не может повторно подключить или сбросить соединение вообще.
- Что мне делать, когда я получаю исключение?Должен ли я восстановить соединение из исключения?
- Как мы строим кодирование для регулярной проверки соединения?
- Как мы строим кодирование, чтобы вернуть соединение, когда оно потеряно?
С уважением,