У меня проблема с функцией 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;
Но в какой-то момент я получаю исключение, и он вообще не может подключиться. Я не уверен, что я делаю неправильно.
Должен ли я сделать это?
- Отключить сначала
- Очистить входной буфер
- Уничтожить TCP-клиент
- Повторно создайте новый 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;
С двумя приведенными выше кодами программа довольно хорошо справляется с повторным подключением и сбросом соединения. Но в какой-то момент программа вообще не может переподключиться или сбросить соединение.
- Что мне делать, когда я получаю исключение? Должен ли я переподключиться из исключения?
- Как мы строим код, чтобы регулярно проверять соединение?
- Как мы создаем код, чтобы восстановить соединение, когда оно было потеряно?
С уважением,