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 :

Connection à un serveur avec son IP publique?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut Connection à un serveur avec son IP publique?
    Bonjour,

    J'ai créé une petite bibliothèque très simple utilisant les socket compatible Windows et Linux. Pour la tester, j'ai créé un programme client et un serveur.
    - Lorsque je lance le serveur et le client sur un seul PC, en demandant au client de s'y connecter en utilisant la boucle locale (127.0.0.1), les deux programmes communiquent bien.
    - Lorsque je fais ce test sur 2 PCs reliés entre eux par réseau local, en donnant au client l'ip locale du PC où le programme serveur est lancé (192.168.0.10), là encore tout se passe parfaitement.

    Par contre, dès que je met mon IP publique (82.125.170.50 par exemple), là impossible de connecter le client sur mon serveur (que les 2 programmes soient lancés sur le même PC ou non). J'ai essayé de configurer/désactiver mon firewall, j'ai testé sous Windows XP Pro, sur Ubuntu, mais rien n'y fait. Ma fonction connect() retourne l'erreur n°10061 pour Windows, et 111 (il me semble) sous Linux. J'ai aussi essayé de changer (pour le serveur) INADDR_ANY par inet_addr ("82.128.70.50"), mais j'ai l'erreur 10049.
    J'ai aussi une Livebox Orange. Là encore j'ai ouvert au niveau du firewall le port 7779 (celui que j'utilise), mais toujours rien. Bref, je ne sais plus quoi faire :S

    Pourriez-vous m'éclairer sur l'origine possible du problème? Une variable à modifier pour signaler au programme serveur que la connection se fera par l'ip publique? Une configuration de l'OS?

    Voici le bout de code (du serveur) paramétrant le socket :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	[...]
    	m_sockfd = socket (AF_INET, SOCK_STREAM, 0);
     
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons (port); //7779
    	addr.sin_addr.s_addr = INADDR_ANY;
     
    	bind (m_sockfd, (struct sockaddr *) &addr, sizeof (addr));
    	[...]
    Pour le client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	[...]
    	socklen_t addrLenght = sizeof (addr);
     
    	m_sockfd = socket (AF_INET, SOCK_STREAM, 0);
     
    	addr.sin_addr.s_addr = inet_addr ("82.128.70.50");
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons (port); // 7779
     
    	connect (m_sockfd, (sockaddr *) &addr, addrLenght);
    	[...]
    Merci d'avance!

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Tu as natté sur ta livebox le port 7779 vers ton PC qui fait office de serveur ?

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Ce n'est visiblement pas un problème de C++...

    MAT.

  4. #4
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut
    C'est vrai que le soucis ne vient pas forcément du C++, mais je ne peux pas m'en assurer à 100%, tant que je n'ai pas vu marcher les programme au moins une fois ^^.

    La seule chose qui pourrait me faire douter de mon code, c'est pour la partie serveur, addr.sin_addr.s_addr. Je ne suis pas certain qu'il faille le mettre à INADDR_ANY et pas 82.125.170.50 (toujours pour garder le même exemple). Mais bon, vu qu'en mettant 82. xx . xx . xx j'ai une erreur...

    Je vais me pencher sur la livebox, car en effet, si ça foit aussi bien sous Windows que sous Linux, alors que je suis certain que sous Windows, tout est bien configuré au niveau du firewall, le principal point commun qui pourrait poser problème... C'est la livebox!

    Non pour le moment je n'ai pas changé les règles de NAT. J'ai juste ouvert le port sur le firewall intégré, comme je l'avais ça avec d'autres applis (emule par exemple) pour les faire fonctionner. Mais je vais essayer de creser de ce coté.

    Si un modo passe par là, qu'il n'hésite pas à déménager le sujet, s'il considère que le soucis ne vient en effet pas du code

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Tu as essayé en DMZ?

  6. #6
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut
    Idem... Même erreur :S

  7. #7
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut
    Désolé pour le double post, c'est pour bien séparer le dernier message et celui-ci. Visiblement, j'ai trouvé la réponse : en effet, ça n'était pas le code, mais simplement le fait qu'il est impossible de tester une appli client/serveur en utilisant la même connection internet ! Il faut soit 2 connections différentes, soit faire les tests avec les IP privées. J'ai fait le test avec un ami, et tout marche parfaitement (si on désactive les firewall logiciels, et qu'on autorise le port utilisé sur la Livebox, biensûr)

    Voila, merci de votre aide, et j'espère que ça pourra épargner du temps à d'autres qui se poseront la même question que moi!

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je vois pas en quoi ce serait impossible, à moins d'avoir un routeur configuré de façon fort étrange. D'ailleurs, il m'arrive de me servir de cette particularité pour simuler une connexion via Internet mais en utilisant un seul ordinateur. Je me connecte à mon ip publique depuis mon ordi A, le routeur redirige naturellement vers A qui est en DMZ, et A crois qu'il a affaire à un ordi d'un autre réseau (pratique pour tester les protocoles pouvant filtrer les demandes suivant un masque).

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/05/2014, 15h46
  2. [Batch] Connecter une imprimante avec son IP
    Par KDZCrew dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 17/03/2010, 07h32
  3. [Débutant] connecter un serveur avec des ordinateurs clients
    Par Guispeed4262 dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 10/11/2007, 18h36
  4. Réponses: 3
    Dernier message: 14/11/2005, 16h18
  5. Connecter un serveur avec ADSL et RTC
    Par Sunny dans le forum Développement
    Réponses: 7
    Dernier message: 09/09/2002, 11h15

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