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

C# Discussion :

Connexion refusée avec TcpClient/TcpListener


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Août 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 2
    Par défaut Connexion refusée avec TcpClient/TcpListener
    Bonjour,

    Comme pas mal de monde ici, je viens exposer mon problème, en espérant que vous pourrez m'aider.

    Dans le cadre de mes études, je dois réaliser un petit jeu en réseau. Cependant, lorsque je tente de me connecter à l'IP 127.0.0.1, alors que le serveur est bien lancé, avec comme message :

    aucune connexion n’a pu être établie car l’ordinateur cible l’a expressément refusée 127.0.0.1:17123
    L'error code renvoyé est le 10045, signifiant que l'opération n'est pas supportée, alors que la connexion s'effectue bien lorsque je tente de me connecter à un serveur sur une autre machine. Netstat indique pourtant que le port est ouvert et en écoute et les pare-feu/antivirus coupés.

    Pour résumer la situation, avec A mon pc de dev et B une autre machine quelconque, on a :

    client vers serveur
    A vers B : OK
    B vers A : KO
    A vers A : KO
    B vers B : KO
    Voici le bout de code incriminé :

    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
     
            // vérif de la validité du port
            private bool checkPort (int port)
            {
                if (port < 65535 && port > 0)
                    return true;
                else
                    return false;
            }
     
            //fonction donnée telle quelle par le prof, vérif l'adresse IP
            private IPAddress AdresseValide(string pc)
            {
                IPAddress Adresse = null;
                try
                {
                    IPAddress[] Adresses = Dns.GetHostEntry(pc).AddressList;
                    for (int i = 0; i < Adresses.Length; i++)
                    {
                        Ping p = new Ping();
                        PingReply r = p.Send(Adresses[i]);
                        if (r.Status == IPStatus.Success)
                            if (!Adresses[i].IsIPv6LinkLocal && !Adresses[i].IsIPv6Multicast && !Adresses[i].IsIPv6SiteLocal && !Adresses[i].IsIPv6Teredo)
                                Adresse = Adresses[i];
                    }
                }
                catch (Exception e) { MessageBox.Show("Pas de connexion (" + e.Message + ")"); }
     
                return Adresse;
            }
     
            //démarrage du serveur => OK
            private void btServeur_Click(object sender, EventArgs e)
            {
                _estServeur = true;
                _online = true;
                _monJoueur = tk1;
                btServeur.Enabled = btClient.Enabled = false;
                btDeco.Enabled = true;
                port = int.Parse(tbPort.Text);
                IPAddress IPLocal = AdresseValide(Dns.GetHostName());
                if (checkPort(port))
                {
                    TServeur = new TcpListener(IPLocal, port);
                    TServeur.Start();
                    TClient = TServeur.AcceptTcpClient();
                    flux = TClient.GetStream();
                    bw = new BinaryWriter(flux);
                    br = new BinaryReader(flux);
                    bw.Write("Connexion initialisée");
                    MessageBox.Show(br.ReadString());
                }
            }
     
            //connexion vers le serveur => 127.0.0.1 fait n'imp
            private void btClient_Click(object sender, EventArgs e)
            {
                if (tbIP.Text.Length > 0)
                {
                    _estServeur = false;
                    _online = true;
                    _monJoueur = tk2;
                    btServeur.Enabled = btClient.Enabled = false;
                    btDeco.Enabled = true;
                    port = int.Parse(tbPort.Text);
                    IPAddress IPdistant = AdresseValide(tbIP.Text);
                    if (checkPort(port))
                    {
                        TClient = new TcpClient();
                        TClient.Connect(IPdistant, port);
                        flux = TClient.GetStream();
                        br = new BinaryReader(flux);
                        bw = new BinaryWriter(flux);
                        bw.Write("Connexion initialisée depuis " + AdresseValide(Dns.GetHostName()) + ".");
                        MessageBox.Show(br.ReadString());
                    }
                }
                else
                    MessageBox.Show("Indiquer une addresse de connexion", "Avertissement");
            }
    Quelqu'un aurait-il une idée de ce qui ne fonctionne pas?

    Voilà, j'espère avoir été clair et complet, que mon code n'est pas trop sale, et je vous remercie d'avance pour toute aide qui pourrait m'être apportée.

    Yannick.

  2. #2
    Membre très actif
    Homme Profil pro
    Developpeur
    Inscrit en
    Décembre 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 111
    Par défaut Utilise le socket
    Salut Mr. pourquoi n'est pas utiliser le Socket? en faite moi j'ai fais une application de tchatte entre différents postes,ça fonctionnait très bien

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Août 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 2
    Par défaut
    J'ai choisi cette méthode parce-que, contrairement aux sockets, nous l'avions déjà utilisée en classe, donc ça me semblait plus simple. La simplicité ici est très importante car la programmation n'est pas la matière dans laquelle je suis le plus doué, loin de là.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Hlama Voir le message
    Salut Mr. pourquoi n'est pas utiliser le Socket?
    TcpClient et TcpListener utilisent la classe Socket en interne, donc ça revient au même, c'est juste plus compliqué en utilisant directement Socket...

  5. #5
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    La seule contrainte que tu as . C est de démarrer tcplisner avant tcpclient .
    À mon avis aussi le port ne peux utiliser qu à par un seul programme .

Discussions similaires

  1. mod_proxy_ftp : connexion refusée avec Filezilla
    Par aureliensm dans le forum Apache
    Réponses: 1
    Dernier message: 06/05/2010, 15h44
  2. Réponses: 1
    Dernier message: 20/05/2009, 09h55
  3. Réponses: 2
    Dernier message: 18/07/2007, 19h26
  4. pool de connexion jdbc avec apache
    Par de LANFRANCHI dans le forum Oracle
    Réponses: 9
    Dernier message: 24/01/2005, 16h34
  5. Maintenir une connexion ouverte avec ssh
    Par jean-jacques varvenne dans le forum Réseau
    Réponses: 2
    Dernier message: 23/01/2005, 21h39

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