我在 TIdTCPServer 的 OnExecute 中有以下代码(安装随附的 Delphi 2009 和 Indy 10),这与本网站上的其他示例非常相似;
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) 上总是失败。
另外作为旁注,我注意到在 Indy 的代码中,有些人抓住了 AContext.Connection.IOHandler 而不是 AContext.Connection.Socket 并做与上面的代码相同的事情,什么是“正确”的使用。
谢谢
布鲁斯