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

Réseau C Discussion :

Socket et internet


Sujet :

Réseau C

  1. #1
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut Socket et internet
    Bonjour à toutes et à tous,
    je suis entrain de réaliser ma première appli réseau. Et je n'ai pas trop eu de problème pour créer une petite appli de tchat. Le problème c'est que je n'arrive à la faire fonctionner qu'en LAN, 2 ordis sur un même réseau local. Dès que je rentre une adresse public je n'arrive pas à me connecter. Sachant que pour l'instant à chaque fois que j'ai pu tester le client comme le serveur se trouvaient dans un réseau lié au net par un routeur NAT. Y a-t-il une procédure à rajouter dans ce cas là pour que le socket puisse être établie. Je précise que pour tester la connexion j'ai auparavant ouvert les ports des routeurs et du firewall windows. Si quelqu'un à une idée, j'ai cru voir que c'était un problème récurent mais je n'ai pas vu comment le résoudre :/
    Merci d'avance ^^

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Pour accéder à une machine sur un LAN distant à partir d'un autre LAN, tu vas devoir passer au travers de DEUX passerelles : la tienne, et la sienne.

    Or, pour la joindre, tu vas devoir connaître son IP publique (et à priori, tu ne la connais pas), donc il faut soit passer par un serveur public de confiance qui va "reconnaître" ton protocole, et te donner son IP (principe du peer-to-peer), soit celui qui doit être contacté possède un nom de domaine DNS (éventuellement dynamique).
    Et surtout, il faudra que le routeur du LAN distant expédie les paquets du port que tu utilises vers la "bonne" machine.

    Tout ça est totalement indépendant du code source que tu as fait, qui est parfaitement compatible avec l'utilisation sur le net. C'est un problème de configuration du réseau et des routeurs d'une part, et de résolution d'adresse de l'autre.

  3. #3
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Et bien pour l'instant je ne me préoccupe pas du cas ou je ne connais pas l'IP de l'autre personne, pour l'instant je fais ça manuellement en lui demandant son IP, car récupérer une IP à partir d'un login sur un serveur de confiance ça je vois très bien comment faire.

    Et surtout, il faudra que le routeur du LAN distant expédie les paquets du port que tu utilises vers la "bonne" machine.
    Oui mais là je vois pas trop, quand j'installe un jeu, par exemple de stratégie ou je peux avoir le rôle de client/serveur je n'ai rien à faire au niveau du routeur c'est le programme qui se débrouille. Dans certains jeux il y a un bouton rafraichissement nat (donc ça fait bien autre chose que simplement essayer de connecter des sockets), est-ce que je dois faire quelque chose pour trouver l'ip du modem/box et l'utiliser comme passerelle ou un truc dans le genre ?

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    Oui mais là je vois pas trop, quand j'installe un jeu, par exemple de stratégie ou je peux avoir le rôle de client/serveur je n'ai rien à faire au niveau du routeur c'est le programme qui se débrouille.
    Normal, c'est TOI le client, donc l'initiateur de la connexion, et ceci dans tous les cas... De plus, tu es en général "reconnu" via un serveur d'authentification (type Battle.net) qui effectue la partie de synchro en fournissant l'IP de chacun à tous les participants. C'est du trafic SORTANT, donc pas de problème de routage (ta passerelle est là pour effectuer le routage adéquat).

    Là, pour le type d'en face, c'est du trafic ENTRANT. Donc, si le routeur ne sait pas à quelle machine cela s'adresse, ni comment ce paquet sur le port XXXX est arrivé là (vu qu'il n'y a pas eu d'émission préalable pour établir une connexion), comment veux-tu que le destinataire reçoive quoi que ce soit ? C'est un problème de routage, uniquement...

    Normalement, son modem-routeur doit avoir une option de réglage permettant d'expédier le trafic entrant vers une machine donnée : il faut qu'il l'active pour atteindre la machine adéquate.

  5. #5
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Ok j'ai bien compris cette histoire de trafic entrant/sortant. Si le traffic est sortant le routeur va bindé un de ses ports avec ma machine ce qui fait que le socket qui a été connecté en tant que client, mon routeur saura traité les données entrant et sortant par ce port vu qu'il est déjà lié à ma machine.
    J'ai aussi pigé le truc avec le routeur et la redirection de ports mais enfaite c'est vrai que la solution du serveur public me parait mieux même pour les tests, c'est pourquoi mes prochaines questions vont porter dessus et donc je n'essaye plus de faire un tchat pair à pair.
    Mais donc dans le cas où l'on se connecte à un serveur public de confiance, que l'on créé une partie, et donc qu'on devient host, le serveur public va donner aux clients qui voudront joindre ma partie, des infos sur le routage pour atteindre ma machine ? Comment puis-je faire ça ? En utilisant le socket précédemment créé entre moi (le host de la partie) et le serveur public ?
    Merci à toi pour tes réponses qui m'ont déjà bien éclairé sur la question ^^

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    Mais donc dans le cas où l'on se connecte à un serveur public de confiance, que l'on créé une partie, et donc qu'on devient host, le serveur public va donner aux clients qui voudront joindre ma partie, des infos sur le routage pour atteindre ma machine ? Comment puis-je faire ça ? En utilisant le socket précédemment créé entre moi (le host de la partie) et le serveur public ?
    Le plus souvent, pour des raisons de sécurité et d'anti-triche, tout passe par le serveur qui ne fait alors que "router" les paquets vers qui de droit. Chaque participant ne voit alors QUE le serveur de jeu, et seulement lui. Le protocole est plus simple, plus fiable, mais ça augmente la BP (et donc la charge) du serveur.

    Toutefois, tu peux aussi protocoler l'envoi de données "privées", telle que l'IP notamment, de façon à permettre une connexion directe entre plusieurs machines. Par contre, là, je ne sais pas exactement comment ça se passe côté NAT/routeur, parce que je n'ai jamais eu la curiosité de sniffer mon LAN à ce moment...

  7. #7
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Et bien je te remercie pour tes réponses qui m'ont bien aidées ^^
    Si quelqu'un à une idée pour connecter 2 machines distantes, chacune dans un LAN différent derrière un routeur NAT, sachant que les 2 machines sont connectées à un serveur publique. Je suppose que le serveur public doit envoyer des informations de routage au premier client s'il veut se connecter au 2°. Ces informations le serveur public les connait surement vu qu'il est connecté ou en tout cas il a un socket qui communique avec cette machine alors il a peut-être des informations essentiels qui feront que le routage se fera de la même manière. Bref si quelqu'un à une idée sur le sujet ça m'arrangerais ^^
    Merci

  8. #8
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Pour résumer j'aimerais savoir comment un serveur public peut initier une connexion pair à pair avec deux de ses clients, une idée ?

Discussions similaires

  1. Application client/serveur (sockets) via Internet
    Par --flow-- dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 06/05/2009, 07h08
  2. Sockets et Internet
    Par norwy dans le forum Windows
    Réponses: 1
    Dernier message: 25/02/2007, 22h04
  3. Faire fonctionner mes sockets sur internet
    Par the_penguin dans le forum Développement
    Réponses: 9
    Dernier message: 22/04/2006, 11h37
  4. [Socket][C++]Utilisation des sockets sur internet
    Par ChriGoLioNaDor dans le forum Développement
    Réponses: 8
    Dernier message: 13/01/2006, 21h38
  5. Sockets, Internet et Réseau
    Par Harvester dans le forum Développement
    Réponses: 13
    Dernier message: 06/04/2005, 14h22

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