Indy 10 показывает ошибку «ConnectionTimeOut» после 4-5 подключений

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

 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 этого потока, и они будут созданы один за другим, после того, как поток завершится, следующий будет создан. Message-Handler объявляется в форме:

 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 раза подключается к серверу, иногда я получаю ошибку TimeOutFTCPClient.Connect

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

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

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

multithreading,delphi,tcp,indy10,

0

Ответов: 0

Indy 10 показывает ошибку «ConnectionTimeOut» после 4-5 подключений

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

 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 этого потока, и они будут созданы один за другим, после того, как поток завершится, следующий будет создан. Message-Handler объявляется в форме:

 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 раза подключается к серверу, иногда я получаю ошибку TimeOutFTCPClient.Connect

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

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

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

00многопоточность, Дельфы, ТСР, indy10,
Похожие вопросы