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

Web & réseau Delphi Discussion :

Comment vérifier qu'un TServerSocket est connecté?


Sujet :

Web & réseau Delphi

  1. #1
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut Comment vérifier qu'un TServerSocket est connecté?
    Bonjour à tous,

    Je voudrais savoir comment savoir si un TServerSocket (un certain port sur une certaine adresse IP) est connecté ou pas.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Server1.Active then ...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut
    Merci, mais ce que je veux dire, c'est vérifier si un serveur ne se trouvant pas dans l'applications (sur un autre ordinateur) est connecté ...

  4. #4
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    le plus simple selon moi c'est d'essayer de se connecter au serveur en question !
    si la connection échoue et que tu es certain de l'accessibilité de la machine, alors le serveur en question n'est pas à l'écoute.
    Utilises un composant socket client comme TClientSocket par exemple, configure ses propriétés sur l'IP de ton serveur et son port d'écoute, puis lance la connection avec celui-ci.
    si une connection s'établit, ton serveur est à l'écoute, sinon il ne l'est pas.

  5. #5
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut
    J'ai déjà essayé cette solution, mais le problème c'est que lorsque le serveur n'éxiste pas, il renvoit une exception qui arrête le programme ...

  6. #6
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut
    Ce dont j'aurais besoin, c donc un code permettant de gérer le fait qu'une connection echoue à cause du fait que le serveur est introuvable ...

  7. #7
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    salut Matt2094 voila un petit code qui pourrait te guider :
    place un TClientSocket deux TEdit et un TButton, puis utilise ce code
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ScktComp;
     
    type
      TForm1 = class(TForm)
        ClientSocket1: TClientSocket;
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
          ErrorEvent: TErrorEvent; var ErrorCode: Integer);
        procedure Button1Click(Sender: TObject);
        procedure ClientSocket1Connect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ClientSocket1Disconnect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ClientSocket1Connecting(Sender: TObject;
          Socket: TCustomWinSocket);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.ClientSocket1Error(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    var
        s:string;
    begin
        case ErrorEvent of
        //survient du fait que le serveur auquel on désire se connecter est introuvable
        eeLookup: s := 'Adresses introuvable';
        //
        eeGeneral: s := 'Le socket reçoit un message d''erreur ne correspondant à aucune des catégories suivantes.';
        //
        eeSend: s := 'Une erreur a eu lieu lors d''une tentative d''écriture dans la connexion de socket.';
        //
        eeReceive: s := 'Une erreur a eu lieu lors d''une tentative de lecture dans la connexion de socket.';
        //
        eeConnect: s := 'Une demande de connexion déjà acceptée n''a pas pu être achevée.';
        //
        eeDisconnect: s := 'Une erreur a eu lieu lors d''une tentative de fermeture de la connexion.';
        //
        eeAccept: s := 'Un problème s''est produit lors d''une tentative d''acceptation d''une demande de connexion cliente.';
      end;
      ShowMessage( s + #13' Code d''erreur =  ' + IntToStr( ErrorCode ) );
      //code d'erreur à mis zéro pour éviter le déclenchement d'une exception
      ErrorCode := 0;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      //fermer le socket
      self.ClientSocket1.Active := false;
      //nom de l'hôte auquel on se connecte
      self.ClientSocket1.Host := self.Edit1.Text;
      //port sur lequel le serveur écoute
      self.ClientSocket1.Port := StrToInt( self.Edit2.Text );
      //ouverture de la connection
      self.ClientSocket1.Open();
    end;
     
    procedure TForm1.ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      Showmessage('Connecté !');
    end;
     
    procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      ShowMessage('Déconnecté !');
    end;
     
    procedure TForm1.ClientSocket1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      Showmessage('Connection en cours...');
    end;
     
    end.

  8. #8
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut
    Justement, ce code (qui est presque le même que celui qu j'ai fais) fait une erreur lors de la connexion qui le serveur n'est pas connecté ...

  9. #9
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par Matt2094
    Justement, ce code (qui est presque le même que celui qu j'ai fais) fait une erreur lors de la connexion qui le serveur n'est pas connecté ...
    erreur qui est gérée dans l'évènement OnError du ClientSocket.
    as-tu testé le code ?

  10. #10
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut
    Oui, j'ai recopier éxactement ce code, et même avec la procédure OnError, qui éxécute, il me fais une erreur ...

  11. #11
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par Matt2094
    Oui, j'ai recopier éxactement ce code, et même avec la procédure OnError, qui éxécute, il me fais une erreur ...
    quel message d'erreur exactement ? message d'erreur du débogueur ? l'application continue son exécution ou alors elle s'arrête ?

  12. #12
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut
    L'erreur est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur socket asynchrone 10061
    C'est une erreur qui se produit aussi en éxécution normale, donc qui n'est pas seulement sur le débogueur. Et oui, l'application continue. Mais il affiche quand même un msg d'erreur, ce que je veux supprimé.

  13. #13
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    étrange...
    utilises-tu exactement le code que j'ai posté ?

    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
    procedure TForm1.ClientSocket1Error(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    var
        s:string;
    begin
        case ErrorEvent of
        //survient du fait que le serveur auquel on désire se connecter est introuvable
        eeLookup: s := 'Adresses introuvable';
        //
        eeGeneral: s := 'Le socket reçoit un message d''erreur ne correspondant à aucune des catégories suivantes.';
        //
        eeSend: s := 'Une erreur a eu lieu lors d''une tentative d''écriture dans la connexion de socket.';
        //
        eeReceive: s := 'Une erreur a eu lieu lors d''une tentative de lecture dans la connexion de socket.';
        //
        eeConnect: s := 'Une demande de connexion déjà acceptée n''a pas pu être achevée.';
        //
        eeDisconnect: s := 'Une erreur a eu lieu lors d''une tentative de fermeture de la connexion.';
        //
        eeAccept: s := 'Un problème s''est produit lors d''une tentative d''acceptation d''une demande de connexion cliente.';
      end;
      ShowMessage( s + #13' Code d''erreur =  ' + IntToStr( ErrorCode ) );
      //code d'erreur à mis zéro pour éviter le déclenchement d'une exception
      ErrorCode := 0;
    end;
    l'aide de delphi précise que le paramètre ErrorCode doit être mis à zéro dans l'évènement OnError du ClientSocket pour éviter qu'une exception ne soit lancée.

  14. #14
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut
    Merci ! Ca marche ! Je n'ai pas d'aide sur les composants TClientSocket et TServerSocket, c'est pour ça que je n'ai pas penser à ça. Merci encore !

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

Discussions similaires

  1. ServerSocket Comment vérifier si un client est connecté?
    Par Night_Wolf1619 dans le forum Débuter
    Réponses: 6
    Dernier message: 03/12/2012, 19h59
  2. Réponses: 13
    Dernier message: 19/02/2006, 16h54
  3. Comment vérifier qu'une date est nulle
    Par stressy dans le forum Access
    Réponses: 7
    Dernier message: 09/12/2005, 15h41
  4. Réponses: 15
    Dernier message: 27/04/2005, 10h41
  5. [Delphi 6] Comment détecter si un poste est connecté ?
    Par Lung dans le forum Web & réseau
    Réponses: 81
    Dernier message: 22/04/2005, 15h13

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