【发布时间】:2009-10-02 00:05:05
【问题描述】:
我在 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) 上总是失败。
另外作为旁注,我注意到在 Indy 的代码中,有些人使用 AContext.Connection.IOHandler 而不是 AContext.Connection.Socket 并执行与上面代码相同的操作,“什么是”正确”的使用。
谢谢
布鲁斯
【问题讨论】:
-
仅供参考,D2009 附带的 Indy 10 版本中存在错误,这些错误已在 Indy SVN 的后续快照中修复。您应该考虑升级您的 Indy 安装。
标签: delphi delphi-2009 indy