Мне недавно потребовалось обновить старый проект Delphi 6 до Delphi 2007. Это серверное приложение, использующее компонент Indy TidTCPServer. Я следовал всем примерам обновления до Indy 10.
Приложение взаимодействует со старым приложением VB6 (для которого у нас нет кода) через TCP / IP. У меня трудное время, потому что событие Execute в компоненте Indy срабатывает, как только приложение VB6 подключается, но оно не записывает никаких данных. Это приводит к зависанию приложения в ожидании отправки приложением данных, которые никогда не поступают.
Исходный код выглядел так:
data := AContext.Connection.IOHandler.ReadLn;
if data <> '' then
begin
// do some stuff
end;
Я пробовал несколько примеров кода из примеров Indy, а также здесь, на 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.