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 :

Problème de connexion entre client et serveur / Erreur de socket #10061 Connexion refusée.


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Par défaut Problème de connexion entre client et serveur / Erreur de socket #10061 Connexion refusée.
    Salut tous le monde j'essaye de faire une simple application de chat en utilisant mon adresse IP publique comme adresse de mon serveur (j'utilise le host de no-ip puisque mon adresse publique est dynamique) et je reçois toujours l'erreur suivante du côté du client : Erreur de socket #10061 Connexion refusée. sachant que j'ai établi la règle de NAT (Network Adress Translation) dans mon routeur et biensure j'utilise le même port sur le client et le serveur. Alors comment y remédier à cette erreur. Voila le code source du client et serveur.

    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
    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
      IdTCPClient, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        Edit2: TEdit;
        Button1: TButton;
        Button2: TButton;
        IdTCPClient1: TIdTCPClient;
        Shape1: TShape;
        Edit3: TEdit;
        Button3: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    IdTCPClient1.Port:= strtoint(edit2.text);(* spécifier le port*)
    IdTCPClient1.Host:=Edit1.Text; (* Spécifier l'adresse IP du serveur.*)
    IdTCPClient1.connect; (* demander d’établir une connexion*)
    Shape1.Brush.Color := clblue;(* Brush Spécifie la couleur et le motif utilisés pour remplir le contrôle forme.*)
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    IdTCPClient1.Disconnect; (* se déconnecter*)
    Shape1.Brush.Color := clred;
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    IdTCPClient1.WriteLn(edit3.Text); (* envoyer un message de type string à laconnexion courante *)
    end;
     
    end.
    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
    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, IdBaseComponent, IdComponent, IdTCPServer, ExtCtrls, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Label1: TLabel;
        Edit1: TEdit;
        Label2: TLabel;
        Edit2: TEdit;
        Button1: TButton;
        Button2: TButton;
        Shape1: TShape;
        IdTCPServer1: TIdTCPServer;
        Memo1: TMemo;
        Button3: TButton;
        Edit3: TEdit;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure IdTCPServer1Connect(AThread: TIdPeerThread);
        procedure IdTCPServer1Execute(AThread: TIdPeerThread);
        procedure Button3Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    IdTCPServer1.DefaultPort:= strtoint(edit1.Text);
    IdTCPServer1.Active := true; (*ouvre la une connexion d'écoute qui rend le socketattentif aux demandesdes clients.*)
    edit2.text:= IdTCPServer1.localname;(*localname Indique le nom du système local.*)
    Shape1.Brush.Color := clblue;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    IdTCPServer1.Active := false; (* se déconnecter*)
    Shape1.Brush.Color := clred;
    end;
     
    procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
    begin
    memo1.Lines.Add ('Connecter de: ' +AThread.Connection.Socket.Binding.PeerIP);
    end;
     
    procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
    var text:string;
    begin
    text :=athread.Connection.readln();
    memo1.Lines.add( athread.Connection.socket.Binding.peerIp+ text);
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    var
      Count: Integer;
      List : TList;
    begin
     List := IdTCPServer1.Threads.LockList;
        try
          for Count := 0 to List.Count -1 do
               begin
    TIdPeerThread(List.Items[Count]).Connection.WriteLn('');//write the command to the client
                    TIdPeerThread(List.Items[Count]).Connection.WriteLn('edit3.text');
                end;
     
        finally
            IdTCPServer1.threads.UnlockList;
    end;
    end;
    end.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Le client et le serveur sont sur la même machine ou bien sur le même réseau interne ?

    Si oui, probablement une farce du NAT Hairpinning
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre très actif
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Par défaut
    oui les deux sont dans la même machine mais selon mes connaissance ça ne pose aucun problème et je vais te donner un exemple très connu le RAT tu peux exécuter le serveur et le client dans la même machine et tu auras une connexion entre les deux !

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par bm1990 Voir le message
    oui les deux sont dans la même machine mais selon mes connaissance ça ne pose aucun problème et je vais te donner un exemple très connu le RAT tu peux exécuter le serveur et le client dans la même machine et tu auras une connexion entre les deux !
    Effectivement, cela ne pose aucun problème (et je l'ai déjà fait)
    Par contre, si tu es sur un réseau interne privé (192.168.x.x par exemple), ton client n'a pas le droit d'utiliser l'adresse IP externe du serveur (celle vue de l'extérieur). Cela s'appelle du NAT Hairpinning. Il te faut utiliser l'adresse IP interne (si tu es sur la même machine, tu peux aussi utiliser 127.0.0.1)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre très actif
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Effectivement, cela ne pose aucun problème (et je l'ai déjà fait)
    Par contre, si tu es sur un réseau interne privé (192.168.x.x par exemple), ton client n'a pas le droit d'utiliser l'adresse IP externe du serveur (celle vue de l'extérieur). Cela s'appelle du NAT Hairpinning. Il te faut utiliser l'adresse IP interne (si tu es sur la même machine, tu peux aussi utiliser 127.0.0.1)
    Mais mon but est de l'utiliser de l’extérieur ! alors comment corriger le code de client ? que dois je faire ?

  6. #6
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    Citation Envoyé par bm1990 Voir le message
    Mais mon but est de l'utiliser de l’extérieur ! alors comment corriger le code de client ? que dois je faire ?
    Si tu lis le lien que t'as donné Ram-0000 tu comprendra pourquoi ca ne fonctionne pas.

    Et si tu utilises ton client depuis l'extérieur de ton reseau (ou avec un VPN/proxy externe) tu verra que ça fonctionne.

    Les disfonctionnements que tu décrits correspondent tout à fait au NAT Hairpinning ou NAT Loopback.

    Lance ton client depuis l'extérieur et constate que ça fonctionne...

    Pour faciliter le développement utilise 'localhost' à la place de ton IP public puis pour tes releases remplace localhost par ton IP public ou URL (tout en sachant qu'elle ne fonctionnera pas sur ton réseau local.). Ca peut être une option de ton client : Connexion distante / Connexion locale.

  7. #7
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 130
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 130
    Par défaut
    Salut,

    Je ne peux pas tester ton code du serveur, cependant dans de vieilles docs j'ai retrouvé ces deux informations :
    - si pas de serveur, erreur 10061
    - such as 10061 when the server is not running
    comme si le serveur ne tournait pas...

    Est-ce que tu peux pinger l'adresse utilisée ? Ne serait-ce pas un problème de firewall ?

  8. #8
    Membre très actif
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Par défaut
    Bon le problème est dans le client parce que qu'on je teste par un site si le port par exemple 6000 est ouvert et mon serveur est en écoute alors le serveur m'indique qu'il y une nouvelle connexion et cette connexion est celle du site qui teste le port et aussi m'informe que le port 6000 est ouvert

  9. #9
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par bm1990 Voir le message
    Bon le problème est dans le client parce que qu'on je teste par un site si le port par exemple 6000 est ouvert et mon serveur est en écoute alors le serveur m'indique qu'il y une nouvelle connexion et cette connexion est celle du site qui teste le port et aussi m'informe que le port 6000 est ouvert
    le client utilise bien l'adresse IP publique du serveur (donc celle de la routeur) ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Membre très actif
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    le client utilise bien l'adresse IP publique du serveur (donc celle de la routeur) ?
    Oui biensure qu'il utilise celle du routeur et qui est l'adresse publique

  11. #11
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par bm1990 Voir le message
    Oui biensure qu'il utilise celle du routeur et qui est l'adresse publique
    il ne faut pas mettre de côté les questions de bases

    TCP/IP est un protocole très (voir trop) simple, en suivant étape par étape on fini toujours par trouver ce qui cloche.

    que donnent

    "PING adresse_ip"

    et

    "TELNET.EXE adresse_ip port"

    depuis le client ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/09/2013, 00h37
  2. Connexion oracle 10g entre client et serveur
    Par toshiro92 dans le forum Connexions aux bases de données
    Réponses: 2
    Dernier message: 23/02/2010, 14h53
  3. problème lors d'un dialogue entre client et serveur
    Par Dave62 dans le forum Réseau
    Réponses: 3
    Dernier message: 10/12/2008, 09h24
  4. [ODBC] Problème entre client windows, serveur windows
    Par Invité dans le forum Installation
    Réponses: 13
    Dernier message: 13/09/2006, 12h15
  5. [Java] Communication entre client et serveur
    Par danje dans le forum CORBA
    Réponses: 1
    Dernier message: 14/12/2004, 18h08

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