Инди 10 показывает ошибку «ConnectionTimeOut» после 4 - 5 подключений - PullRequest
0 голосов
/ 24 августа 2018

Я создал поток, который должен подключаться к серверу, отправлять запрос и читать ответ как поток.Метод выполнения потока объявлен так:

 FTcpClient := TIdTCPClient.Create(nil);
 FTcpClient.Host := ServerIPAddress;
 FTcpClient.Port := 1919;
 FTcpClient.ConnectTimeout := 40000;
 FTcpClient.ReadTimeout := 40000;

 FTcpClient.OnWork := TCPClientWork;
 FTcpClient.OnWorkBegin := TCPClientWorkBegin;
 FTcpClient.OnWorkEnd := TCPClientWorkEnd;
 try
  FTcpClient.Connect;
  FTcpClient.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8;
 except
  on E:exception do
   begin
    { ... Send Error to the Form }
   end;
 end;

 { Send Request and Read Response here ... }

 PostMessage(...) { Send Result Message }

В форме, которую я создал 7 из этого потока, они будут созданы один за другим, после завершения потока будет создан следующий.Обработчик сообщений объявляется в следующем виде:

 case MSG.WParam of
  1 : begin
       PBar.Max := MSG.LParam; {Max}
       PBar.Infinite := False;
       PBar.ShowPercentage := True;
       PBar.ShowPosition := True;
      end;
  2 : PBar.Position := MSG.LParam;  {Step}
  3 : begin
       case I of
        1 : begin
             { ... }
             RThread := TRefreshThread.Create(Handle, SelectCmd, DataSet, Msg_Select);
             RThread.Start;
            end;
        2 : begin
             { ... }
             RThread := TRefreshThread.Create(Handle, SelectCmd, DataSet, Msg_Select);
             RThread.Start;
            end;
        3 : begin
             { ... }
             RThread := TRefreshThread.Create(Handle, SelectCmd, DataSet, Msg_Select);
             RThread.Start;
            end;
        { ... }
        7 : begin
             { ... }
             RThread := TRefreshThread.Create(Handle, SelectCmd, DataSet, Msg_Select);
             RThread.Start;
            end;
       end;

       I := I + 1;
       PBar.Position := 0;
      end;
  4 : begin 
       { ... }
      end;
 end;

Проблема заключается в том, что после 3 или 4-кратного подключения к серверу иногда Я получаю ошибку TimeOut при FTCPClient.Connect

Нет проблем при отправке запросов и чтении ответов

На стороне сервера у меня есть TIdCMDTCPServer с некоторыми командами

Я использую Delphi 10.1 Berlin с Indy 10

...