我在TIdTCPServer的OnExecute(Delphi 2009和Indy 10附帶的安裝中)中有以下代碼,它與本網站上的其他示例非常相似;TIdTCPServer不能從套接字讀取數據有時
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並做與上面的代碼相同的東西,什麼是「正確的」一個使用。
感謝
布魯斯
僅供參考,印第安納波利斯10與D2009附帶的構建中有臭蟲分別固定在印第安納波利斯的SVN以後的快照。你應該考慮升級你的Indy安裝。 – 2009-10-05 22:06:29