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