Показать сообщение отдельно
  #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-файлы, которые я веду), но до клиента он не доходит.
Буквально вчера вечером обнаружил такую особенность - если нажимать на кнопку у клиента несколько раз, то данные все таки приходят от сервера, но это происходит хаотично. Т.е. иногда приходит каждый пятый ответ, иногда -десятый.
Ответить с цитированием