Bonjour à tous,
Je commence en Delphi, j'utilise la version 7 (pro).
Je fais communiquer mon application en Delphi avec une machine. Les 2 discutent en TCP.
- création du serveur TCP : aucun problème.
- communication entre la machine et l'appli : ok (via OnExecute)
c'est surement très moche et il doit y avoir des trucs inutiles,
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 type TComm = Class {Evènements de l'objet serveur TCP ("serveur")} procedure ServeurTCP_OnConnect(AThread : TIdPeerThread); procedure ServeurTCP_OnExecute(AThread : TIdPeerThread); procedure ServeurTCP_OnDisconnect(AThread : TIdPeerThread); private serveur : TIdTCPServer; liaison_mtl_serveur: TIdTcpServerConnection; connexion_mtl_serveur : boolean;{indicateur de l'état de la connexion} ... end; procedure TComm.ServeurTCP_OnExecute (AThread : TIdPeerThread); var data : string; begin with AThread.Connection do try try liaison_mtl_serveur := AThread.Connection; data := AThread.Connection.CurrentReadBuffer(); if data <> '' then begin donnees_mtl := data; flag_data := true; end; except //Notification d'une erreur au client on E : Exception do WriteLn(Format('ERROR : %s',[e.Message])); end; except Disconnect; //Fermeture de la connexion end; end;
mais lorsque je déconnecte ma machine, j'ai une grosse série d'erreurs :
la "déconnexion" est assez brutale : via une fonction (MTL)Violation d'accès à l'adresse XXXX tentative de lire à l'adresse 000000Lorsque je commente tout le contenu de ma procédure 'OnExecute', je n'ai plus d'erreur. Je ne trouve pas d'où vient mon erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part tcpip.closeall();
Voyez vous d'où peut venir le problème svp ?
au cas ou, je link mes évènements 'OnConnect' et 'OnDisconnect'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TComm.ServeurTCP_OnConnect (AThread : TIdPeerThread); begin {reset de la connection si elle existe} if liaison_mtl_serveur <> nil then begin connexion_mtl_serveur := false; liaison_mtl_serveur := nil; end; {if} liaison_mtl_serveur := AThread.Connection; {connexion} if liaison_mtl_serveur.Connected then connexion_mtl_serveur := true; end;PS : le tout est au sein d'une classe sans graphique dédiée à la communication.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 procedure TComm.ServeurTCP_OnDisconnect(aThread : TIdPeerThread); begin liaison_mtl_serveur := nil; end;
En cas de besoin, je peux link toute ma classe.
Partager