我是Delphi XE5的新手,主要与VB.Net和一些Java一起工作。我试图从传入的TCP连接中读取未知数量的字节,并且没有任何运气研究如何确定要读取的输入缓冲区中有多少个字节。看来,我尝试的每种方法,即ReadBytes,ReadStream等都要求我明确告诉他们要读取多少个字节或它们是否被阻塞。我只需要一种方法来确定输入缓冲区中有多少个字节,以便我可以使用ReadBytes来读取它们。Delphi IOHandler读取未知的字节数
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;
我知道缓冲区中存在数据,因为通过代码进入break;但ExtractToBytes(rxBuf)未被评估,并且不知道为什么。
请参阅我上面的修改。感谢您的评论。 – user1549123