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.
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 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;
J'obtiens des résultats absolument illogiques. En local depuis Lazarus j'ai ça :
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;
En local sans passer par Lazarus j'ai ça :dr.txt
contenu
dr.txt
contenu
Et en exécutant le server et le client sur des machines différentes c'est ça :dr
TRANSFERTFILE
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 messagesTRANSFERTFILE
dr.txt
contenu
dr.txt
contenu
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.
Partager