最近、古い Delphi 6 プロジェクトを Delphi 2007 にアップグレードする必要がありました。これは、Indy TidTCPServer コンポーネントを使用するサーバー アプリケーションです。Indy 10 へのアップグレードで見つけたすべての例に従いました。
アプリケーションは、TCP/IP を介して古い VB6 アプリケーション (コードがない) とインターフェイスします。VB6 アプリケーションが接続するとすぐに Indy コンポーネントの Execute イベントが発生するため、苦労していますが、データは書き込まれません。これにより、アプリケーションは、決して到着しないデータを送信するのを待機してハングします。
元のコードは次のようになります。
data := AContext.Connection.IOHandler.ReadLn;
if data <> '' then
begin
// do some stuff
end;
私は Indy の例からいくつかのコード例を試しました。例は次のとおりです。
AContext.Connection.IOHandler.CheckForDataOnSource(10); AContext.Connection.IOHandler.InputBufferIsEmpty でない場合 始める データ:= AContext.Connection.IOHandler.ReadLn(); データ <> '' の場合 始める // 何かをする 終わり; 終わり;
不思議なことに、元のコードを .NET クライアントで実行すると、問題なく動作します。これは、VB6 アプリケーションに起因する問題のようです。