TIdTCPServer (インストールに付属の Delphi 2009 および Indy 10) の OnExecute に次のコードがあります。これは、このサイトの他の例と非常によく似ています。
Socket := AContext.Connection.Socket;
if Socket.CheckForDataOnSource(10) then
begin
if not Socket.InputBufferIsEmpty then
begin
Socket.InputBuffer.ExtractToBytes(RawBytes, -1, False, -1);
SetLength(Buffer, Length(RawBytes));
Move(RawBytes[0], Buffer[1], Length(RawBytes));
// Do stuff with data here...
end;
end;
AContext.Connection.CheckForGracefulDisconnect;
CheckForDataOnSource(10) が False を返すため、データを読み取らないことがあります。ただし、その行でデバッガーを停止すると、InputBuffer のバイトで送信したデータを確認できます。私がしなければならない他のセットアップや、これを常に機能させる他の方法はありますか? このコードは何度も実行されますが、常に CheckForDataOnSource(10) で失敗します。
また、補足として、一部の人々が AContext.Connection.Socket の代わりに AContext.Connection.IOHandler を取得し、上記のコードと同じことを行う場所の周りの Indy のコードに気付きました。「正しい」ものは何ですか?使用する。
ありがとう
ブルース