我有一個使用TIdTCPServer的應用程序。我將空終止的消息發送到服務器(Delphi XE2,隨附的Indy包)作爲空終止的字符串。 的OnExecute過程如下:缺少來自indy TCPServer的數據。 Delphi XE2
procedure TSimpleSslServerForm.TCPServerExecute(AContext: TIdContext);
var
RxBufStr: string;
begin
with AContext.Connection.IOHandler do
begin
if not InputBufferIsEmpty then
begin
RxBufStr := InputBufferAsString;
Display(RXBufStr);
lbl_EventsReceived.Caption := IntToStr(StrToInt(lbl_EventsReceived.Caption) + 1);
end;
end;
end;
我的問題是,如果我發送的郵件很多,如果我不把一個200毫秒的消息之間延遲的話,我失去的數據。
不加延遲: 我要麼鬆散數據完全(從107接收13個消息發送)和/ OT的數據是不正確: < 38> 07月10 9時37分39秒cilad71 QJRN:OPE = JOB被改變日期= 10/07/15 time = 07:59:26 sys = CILAD71 user = GCOX job = QZSOSIGN jobn = ipadr = 192.168.5.121 pgm = QZSOSIGN pgmlib = QSYS date = 07/10/15 time = 07:59:26 user = GCOX行動= PROFILE CHANGED JOBNAME = QZSOSIGN jobnumber可以= 189191 jobusername = QUSER JOBD = QZBSJOBD IPADDRESS = 192.168.5.121%
15年7月10日時間= 08:01:25 =用戶動作GCOX = PROFILE CHANGED JOBNAME = QZSOSIGN jobnumber = 189191 jobusername = QUSER jobd = QZBSJOBD ipaddress = 192.168.5.121%
< 38> Jul 10 09:37:39 cilad71 QJRN:ope = JOB WAS CHANGED date = 10/07/15 time = 08:01:35 sys = CILAD71 user = GCOX job = QPADEV000D jobn = ipadr = 192.168 .5.121 PGM = QWTPIIPP pgmlib = QSYS日期= 07/10/15時間= 08:01:35 =用戶動作GCOX = START JOBNAME = QPADEV000D jobnumber可以= 189401 jobusername = GCOX JOBD = QDFTJOBD IPADDRESS = 192.168.5.121%
粗體事件缺少數據。
我也看到了與TIdUDPServer組件相同的行爲。我看到的唯一區別是,對於UDP,正確接收所有數據所需的延遲時間爲100毫秒,而對於TCP服務器,消息之間的延遲小於200毫秒總是會導致數據丟失。 對於發送到Windows事件服務時的UDP,以便事件顯示在相應的Windows日誌中,不需要延遲,並且我可以正確地看到所有事件。
感謝, 傑夫·考克斯
由於雷米。 WaitFor(#0)方法提供了正確的結果。 –