Bonjour,

J'ai de gros problèmes avec Indy pour faire du TCP.
J'utilise idTCPServer configuré comme ceci :
- Port 4554
- ListenQueue 15
- MaxConnections 0
- ReuseSocket en OSDependant
- TerminateWait 5000

Le client idTCPClient se connecte au server via le port 4554. Normal.

Le client se connecte au server quand j'appuie sur un bouton. Et envoie 3 messages avant de se déconnecter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
procedure TForm1.Button3Click(Sender: TObject);
begin
  IdTCPClient1.Host := Edit1.Text;
  IdTCPClient1.Connect;
  IdTCPClient1.IOHandler.WriteLn('TRANSFERTFILE');
  IdTCPClient1.IOHandler.WriteLn('dr.txt');
  IdTCPClient1.IOHandler.WriteLn('contenu');
  IdTCPClient1.Disconnect;
end;
Le server de son côté reçoit les messages dans l'ordre (en théorie). La réception se fait dans l'event OnExecute. Comme ça foirait, j'ai mis ce que je reçois dans un memo pour monitorer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  Cmd : String;
begin
  with AContext.Connection.IOHandler do
  begin
    Test := ReadLn;
    Cmd := Test;
 
    if Cmd = 'TRANSFERTFILE' then
    begin
      Test := ReadLn;
      Memo1.Lines.Add(Test);
      Test := ReadLn;
      Memo1.Lines.Add(Test);
    end;
  end;
  AContext.Connection.Disconnect;
end;
J'obtiens des résultats absolument illogiques. En local depuis Lazarus j'ai ça :
dr.txt
contenu
dr.txt
contenu
En local sans passer par Lazarus j'ai ça :
dr
TRANSFERTFILE
contenu
dr.txt
contenu
Et en exécutant le server et le client sur des machines différentes c'est ça :
TRANSFERTFILE
dr.txt
contenu
dr.txt
contenu
C'est un peu du gros n'importe quoi ce que j'ai comme résultats... Pourtant j'ai sniffé un peu le réseau, et le client envoie bien l'info une seule fois. C'est le server qui réceptionne 2 fois les messages

Ca fait une semaine que je me casse la tête avec ça... C'est un peu ma dernière chance de faire fonctionner cette chose.