【发布时间】:2014-02-24 23:14:10
【问题描述】:
我是 Delphi XE5 的新手,主要使用 VB.Net 和一些 Java。我正在尝试从传入的 TCP 连接中读取未知数量的字节,并且没有运气研究如何确定输入缓冲区中有多少字节要读取。似乎我尝试的每种方法,即 ReadBytes、ReadStream 等都要求我明确告诉他们要读取多少字节或它们会阻塞。我只需要一种方法来确定输入缓冲区中有多少字节,这样我就可以使用 ReadBytes 来读取它们。
begin
Client.IOHandler.CheckForDataOnSource(300);
if Not Client.IOHandler.InputBufferIsEmpty then
Client.IOHandler.ReadBytes(rxBuf);
end;
为了不阻塞,我需要提供输入缓冲区中的字节数,但我无法确定如何执行此操作。我尝试了 InputBuffer.Size,但它返回的数字比可能存在的数字大得多。
我现在尝试了以下方法:
begin
if Client.IOHandler.InputBufferIsEmpty then
begin
Client.IOHandler.CheckForDataOnSource(1000);
if Not Client.IOHandler.InputBufferIsEmpty then
begin
Client.IOHandler.InputBuffer.ExtractToBytes(rxBuf);
end;
end
else
Client.IOHandler.InputBuffer.ExtractToBytes(rxBuf);
end;
当我设置断点并单步执行代码时,即使输入缓冲区中有数据,代码也会跳过 ExtractToBytes 并且 rxBuf 保持为零。为什么?
我之前遗漏了一些代码。这就是全部内容。
while stop-start <MainForm.Timeout do
begin
if Client.IOHandler.InputBufferIsEmpty then
begin
Client.IOHandler.CheckForDataOnSource(1000);
stop := Ticks;
if Not Client.IOHandler.InputBufferIsEmpty then
begin
Client.IOHandler.InputBuffer.ExtractToBytes(rxBuf);
break;
end;
end
else
Client.IOHandler.InputBuffer.ExtractToBytes(rxBuf);
break;
end;
我知道缓冲区中有数据,因为单步执行代码会中断;但是 ExtractToBytes(rxBuf) 没有被评估并且不知道为什么。
【问题讨论】:
标签: delphi