Bonjour,
Même sujet que mon précédent post mais problème différent : Je développe actuellement une application qui permet de lire et modifier des paramètres dans une carte électronique en communiquant à travers le réseau. A la mise sous tension, la carte tente de se connecter à un serveur TCP sur le port 80. Une fois la connexion établie, le dialogue de lecture écriture des paramètres commence…
Après avoir essayé le composant TWSocketServer de ICS (voir mon précédent post) j’ai essayé le composant TIdTCPServer (Indy version 9) qui me pose aussi des problèmes :
Je n’arrive pas à lire les trames que m’envoie la carte. La connexion sur le port est bien établie, j’arrive à envoyer une trame vers le client (la carte) mais quand celui-ci répond je ne sais pas comment lire cette réponse (en utilisant Wireshark je vois bien la trame de la carte passer sur le réseau). Voici le code de l’évènement OnExecute, où la propriété AThread.Connection.InputBuffer.Size reste désespérément à zéro et la ligne ReadBuffer n'est donc pas exécutée :
Le code de l’initialisation du serveur :
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
20
21 procedure TMP2Comm.IdTcpServerExecute(AThread: TIdPeerThread); var Data: Array [0..SIZEBUFFERTCP] of byte; Size : integer; begin if not AThread.Terminated and AThread.Connection.Connected then begin Size := 0; if AThread.Connection.IOHandler.Readable(0) then Size := AThread.Connection.InputBuffer.Size; //Size toujours = 0 !? if Size > 0 then begin AThread.Connection.ReadBuffer(Data, Size); FMP2Manager.AddToBuffer(Data, Size); //traitement end; end; end;
J'ai essayé différents exemples que j'ai trouvé mais avec les différences de version entre les 8, 9 et 10 qui circulent c'est un peu confus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 FIdTCPServer.DefaultPort := StrToInt(FPort); //FPort = 80 FIdTCPServer.Active := True;
Merci d'avance si vous avez une idée.
@+
Maël
Partager