我最近需要升級的老德爾福6項目德爾福2007年它是使用印TidTCPServer組件的服務器應用程序。我已經照着所有的例子我能找到的(即我們沒有爲代碼),通過TCP/IP升級到印第安納波利斯10TidTCPServer升級問題
應用程序接口與一個老VB6應用程序。我遇到困難時,因爲Indy組件上的Execute事件一旦VB6應用程序連接就會觸發,但它不會寫入任何數據。這會導致應用程序掛起等待應用程序發送永遠不會到達的數據。
原始代碼看起來像:
data := AContext.Connection.IOHandler.ReadLn;
if data <> '' then
begin
// do some stuff
end;
我試過幾個代碼示例從印第安納波利斯的例子,以及在這裏StackOverlow。一個例子是:
AContext.Connection.IOHandler.CheckForDataOnSource(10); if not AContext.Connection.IOHandler.InputBufferIsEmpty then begin data := AContext.Connection.IOHandler.ReadLn(); if data <> '' then begin // do some stuff end; end;
奇怪的是,原來的代碼完美的作品時,我與.NET客戶端打它。這似乎只是來自VB6應用程序的一個問題。
@Darian - yup。當我用.NET客戶端連接它時,在D2007中重新編譯的原始代碼完美工作。我可能不得不做@Roddy建議的東西,並使用像WireShark這樣的工具。 – 2009-06-23 13:05:39
由於它在D2007中沒有改動而被重新編譯,因此它默認安裝了用於Delphi 6的Indy,之前進行了修改(否則它不會在沒有代碼修改的情況下編譯)。我同意嗅探流量可能真的有幫助,但我還會在Delphi 6盒子上查看Indy文件的日期/時間,看看是否與其他人不同步,以查看默認的Indy行爲是否在Delphi 6盒子上發生了變化。我希望有人不直接修改Indy代碼,但它發生在... – 2009-06-24 04:07:39