Я создал поток, который должен подключаться к серверу, отправлять запрос и читать ответ как поток.Метод выполнения потока объявлен так:
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