IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

TIdTCPServer réouverture de connection impossible


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut TIdTCPServer réouverture de connection impossible
    Bonjour à tous,

    J'ai une connection TCP/IP indy avec TIdTCPServer et client.
    Sur le serveur, je lance mon application: OK
    Sur le client je lance mon application: OK
    J'envoie quelques données: OK
    Sur le client je déconnecte la communication: OK
    Sur le client, je veux la relancer: Impossible !
    Je veux fermer le programme coté Serveur: Violation d'adresse

    Sur le serveur, il rentre dans l'evenement Disconnect() une fois que le client a déconnecté et ne veut plus faire de connect ensuite.

    Voici mon code coté client:
    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
     
    procedure TfrmMain.ouvrirTCP;
    begin
        fermerTCP;
        tcpCMain.Host := txtIp.Text;
        tcpCMain.Port := numPort;
        try
          tcpCMain.Connect;
        except
          SetInfo('Impossible d''ouvrir le port TCP');
        end;
      end;
    end;
     
    procedure TfrmMain.envoyerTCP(ligne: String);
    begin
      if (tcpCMain.Connected) then 
        tcpCMain.Write(ligne);
    end;
     
    procedure TfrmMain.fermerTCP();
    begin
      if (tcpCMain.Connected) then
        tcpCMain.Disconnect;
    end;
    Et coté 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
    22
     
    procedure TfrmMain.tcpSMainConnect(AThread: TIdPeerThread);
    begin
      mmoInfos.Lines.Add('Connecté au '+AThread.Connection.Socket.Binding.PeerIP);
      tcpSMain.Bindings.Clear;
      tcpSMain.Bindings.Add.IP := AThread.Connection.Socket.Binding.PeerIP; // IP de l'autre PC
    end;
     
    procedure TfrmMain.tcpSMainExecute(AThread: TIdPeerThread);
    var
      Line: String;
    begin
      While AThread.Connection.Connected do begin
        Line := AThread.Connection.Readln;
        mmoMain.Lines.Add(Line);
      end;
    end;
     
    procedure TfrmMain.tcpSMainDisconnect(AThread: TIdPeerThread);
    begin
      mmoInfos.Lines.Add('Déconnecté');
    end;
    Qu'est ce qu'il se passe ?

  2. #2
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bon... J'ai trouvé:

    Il ne faut pas mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      tcpSMain.Bindings.Clear;
      tcpSMain.Bindings.Add.IP := AThread.Connection.Socket.Binding.PeerIP; // IP de l'autre PC
    Je ne sais pas ou j'ai trouvé ça mais ça ne devait pas correpondre à mon cas !

    Merci Dacid !

  3. #3
    DMO
    DMO est déconnecté
    Membre chevronné
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Par défaut
    Salut,
    • Côté client, il faut, pour être cohérent, utiliser WriteLn à la place de Write.
    • Côté serveur, 3 problèmes :
    1. Tu n'as pas à boucler toi même, c'est le serveur Indy qui s'en charge : il ne repassera plus dans Execute suite à la déconnexion du client.
    2. Dans Execute (ainsi que dans les autres évènements), tu es dans le contexte d'un listenning thread. Tu comprends donc qu'il ne faut pas jouer directement avec l'IHM.
    3. Ce que tu fais dans le Connect n'est pas utile.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/04/2006, 10h56
  2. [Delphi 2006][Mysql 4.0.24] connection impossible
    Par vincentj dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/03/2006, 16h05
  3. mysql connection impossible
    Par BSD54 dans le forum Outils
    Réponses: 6
    Dernier message: 10/10/2005, 18h28
  4. [SGBD] PHP et MYSQL "Connection Impossible"
    Par saidus dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 02/10/2005, 14h26
  5. [c#] Connection impossible à la base SQL Server
    Par cedgov dans le forum ASP.NET
    Réponses: 8
    Dernier message: 16/05/2005, 07h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo