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