大家早上好。我正在使用 Indy 10.0.52、TIdTCPClient 和 TIdTCPServer 构建一个 Delphi TCP 服务器/客户端应用程序。我在接收来自服务器的异步响应时遇到问题。这是我的示例代码部分:
客户:
procedure TfrmMain.ClientSend();
begin
tcpClient.IOHandler.WriteLn('100|HelloServer');
if tcpClient.IOHandler.ReadLn() = '1100' then //Here I get 1100
begin
tcpClient.IOHandler.WriteLn('200|Are_you_ready_for_data?');
if tcpClient.IOHandler.ReadLn() = '1200' then
begin
end;
end;
end;
服务器:
procedure TfrmMain.tcpServerExecute(AContext: TIdContext);
var command:Integer;
var received,value:String;
begin
received := AContext.Connection.IOHandler.ReadLn;
command := StrToInt(SomeSplitFunction(received,'first_part')); //Here I get 100
value := SomeSplitFunction(received,'second_part'); //Here I get 'HelloServer'
case command of
100:begin
//Do something with value...
AContext.Connection.IOHandler.WriteLn('1100');
end;
200:begin
//Do something with value...
AContext.Connection.IOHandler.WriteLn('1200');
end;
end;
end;
问题是 tcpServerExecute 上的案例 200 永远不会执行,因此客户端站点上的第二个 ReadLn 永远不会被读取。是否支持在单个过程中发送多个异步数据?我遇到过几个简单的 Indy TCP 服务器/客户端应用程序示例,但是我有点卡在这里。只是提到连接正常,我连接到服务器没有问题。