我最近需要升级的老德尔福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