我是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