Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.05.2009, 12:15
AIMor AIMor вне форума
Прохожий
 
Регистрация: 13.03.2009
Сообщения: 31
Репутация: 10
По умолчанию Проблема при передачи данных при помощи Indy

Есть такая проблема.
Пишу программку для обмена данными между Сервером и клиентом.
Использую для этого Indy (idTCPServer и idTCPClient).
До сих пор (пока и сервер и клиент запускались на одной машине) все было нормально, а вот стоило их разнести получилось следующее.
Клиент отправляет серверу запрос, тот в свое время его обрабатывает, в лог-файле пишет, что все нормально и отправляет клиенту ответ, но вот до клиента он не доходит.
Напомню, что пока сервер и клиент работали на одной машине все было нормально.
Подскажите, кто знает, с чем это может быть связано.
Ответить с цитированием
  #2  
Старый 05.05.2009, 13:17
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Они в локалке, или в нете? Если в нете, то возможно роутеры шалят с пакетами...
И в любом случае, посмотри, не ругается ли брэндмауер (форточный).
Или, может быть, фаервол стоит, его тоже надо проверить...

ЗЫ: Информации маловато.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 06.05.2009, 05:17
AIMor AIMor вне форума
Прохожий
 
Регистрация: 13.03.2009
Сообщения: 31
Репутация: 10
По умолчанию

Firewall "форточный" отключен, другие не стоят.
Приведу пример кода.

Клиент по нажатию кнопки отправляет серверу запрос.

Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
   S_Out : TStrings;

begin
   S_Out:=TStringList.Create;

   ... //Забиваю в S_Out данные (порядка пары сотен строк)

   TCPClient_DB.WriteStrings(S_Out,True);
   S_Out.Free;
end;

Сервер, получая запрос, обрабатывает его и отправляет клиенту ответ.

Код:
procedure TS_Server.TCPServerExecute(AThread: TIdPeerThread);
Var
   S_In   : TStrings;
   S_Out : TStrings;

begin
   S_In:=TStringList.Create;
   S_Out:=TStringList.Create;
   AThread.Connection.ReadStrings(S_In);

   ... //Обработка данных S_In и формирование данных S_Out (порядка одной тысячи строк)

   AThread.Connection.WriteStrings(S_Out,True);
   S_In.Free;
   S_Out.Free;
end;

Клиент по таймеру проверяет наличие данных от сервера.

Код:
procedure TForm1.T_DB1Timer(Sender: TObject);
Var
   S_In : TStrings;

begin
   S_In:=TStringList.Create;
   If Form1.TCPClient_DB.Connected Then
      begin
         Try
            Form1.TCPClient_DB.ReadStrings(S_In);
            If (S_In.Count>0) Then
               begin

   ... //Обработка данных S_In

               end;
         Except
            On EIdReadTimeOut Do ;
            Else Form1.TCPClient_DB.Disconnect;
         end;
      end;
   S_In.Free;
end;

При этом, если клиент и сервер находятся на одной локальной машине, то все работает отлично. Но стоит их разместить на разных машинах локальной сети, то данные перестают даходть до клиента.
Повторюсь, что запрос от клиента до сервера доходит в целости и сохранности и более того сервер отправляет ответ клиенту (обо всем этом говорят log-файлы, которые я веду), но до клиента он не доходит.
Буквально вчера вечером обнаружил такую особенность - если нажимать на кнопку у клиента несколько раз, то данные все таки приходят от сервера, но это происходит хаотично. Т.е. иногда приходит каждый пятый ответ, иногда -десятый.
Ответить с цитированием
  #4  
Старый 06.05.2009, 11:14
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Суть понятна... Indy TCP *** - я читал, они вообще лагнутые... Если хочешь - скинь в мыло (popyurv@front.ru) план (что, куда и зачем делает прога), нарежу на TServerSocket и TClientSocket.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #5  
Старый 07.05.2009, 07:32
AIMor AIMor вне форума
Прохожий
 
Регистрация: 13.03.2009
Сообщения: 31
Репутация: 10
По умолчанию

Проблема отпала после обновления Indy до версии 10.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:33.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter