おはようございます。TIdTCPClient と TIdTCPServer を使用して、Indy 10.0.52 を使用して 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 が実行されないため、クライアント サイトの 2 番目の ReadLn が読み取られないことです。単一の手順での複数の非同期データ送信はサポートされていますか?単純な Indy TCP サーバー/クライアント アプリケーションでいくつかの例に出くわしましたが、私はここで少し立ち往生しています.接続が機能していることに言及するだけで、サーバーに問題なく接続できます.