CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++ / SDL_Net] Réseau et routeurs

elhuron
elhuron
Niveau 6
19 décembre 2007 à 18:38:56

Bonsoir :)

Lorsque j´aurai terminé mon projet en cours, c´est a dire dans moin d´une semaine environ, j´en sortirai une V2.0.

Ensuite, je vais essayer d´implementer une amelioration, le réseau.
Pour cela, je compte utiliser SDL_Net, par souci de simplicitée, les sockets, je verrai surement cela plus tard.

Mais je m´interroge d´abord, ca fonctionne differemment avec un routeur je pense, mais SDL_Net le gere? Si oui, differemment que lorsqu´il n´y a pas de routeur ?

Je sais tres bien que le resau est plus difficile, quoique SDL_Net n´est pas bien compliqué je crois, mais je devrai y arriver.

Jme renseignerai un peu plus sur tout ca avant de me lancer dans SDL_Net, histoire de mieux comprendre.

Merci de m´indiquer le fonctionnement de SDL_Net/sockets vis a vis du fait qu´il y ait ou non un routeur. :)

dnob700
dnob700
Niveau 10
19 décembre 2007 à 20:26:14

Pour le programmeur, ça ne change rien le fait qu´il y ait un routeur entre toi et le net (en fait, le net est constitué d´une immense quantité de routeurs).

Il faudrait que tu nous dise en quoi consiste ton projet. Si c´est un client, i.e. un programme qui se connecte à un serveur quelque part, alors le fait que tu possède un routeur ne change rien (à condition que le pare feu du routeur soit configuré pour laisser sortir la connexions, mais généralement dans ce sens là, çane pose pas de problème).
Si tu as un serveur, là c´est moins simple. Si le routeur à une seule IP que partage toute les machines de ton réseau, il faut alors qu´il soit configuré pour que les demande de connexions qui lui arrive sur le port où vas écouter ton serveur soit redirigé vers l´ordinateur qui héberge ce serveur (c´est dans les paramètre NAT généralement dans la configuration d´un routeur).

Mais là encore, pour le programme que tu écris, ça ne change rien.

elhuron
elhuron
Niveau 6
19 décembre 2007 à 22:53:11

Merci pour cette reponse.
Parfait alors si du coté du programme ca ne change rien.

Et bien, mon projet consiste a communiquer entre deux personnes, donc l´un joue le serveur, l´autre le client, donc un seul client par serveur.

elhuron
elhuron
Niveau 6
20 février 2008 à 18:12:06

Salut! Bon, je suis un peu en retard, mais bon :)
J'ai quelques questions a propos du protocole TCP/IP.

Comment mettre en lien deux personnes qui ne se connaissent pas, l'un utilise un programme serveur, et l'autre un programme client ? Le programme serveur va écouter sur un port quelconque, le client utilise le même port, mais il ne connait pas l'IP sur serveur.

D'ailleurs, j'ai fait deux programmes, un client, l'autre serveur. J'arrive a les faire communiquer lorsque je les lance tous les deux sur mon ordinateur, et je connecte le client au serveur avec l'adresse IP (127.0.0.1), mais sur deux ordinateurs distants, rien a faire.

elhuron
elhuron
Niveau 6
20 février 2008 à 18:52:46

Voici deux programmes d'illustration.
(J'utilise SDL_Net par souci de simplicité, j'utiliserai plus tards winsock2 et équivalents sur linux)

Programme Serveur :
http://rafb.net/p/wuBIuz85.html

Programme Client :
http://rafb.net/p/c9NINn50.html

Le fichier dans le dossier Serveur est retranscrit dans le fichier du dossier Client, aucuns problemes.
(J'utilise les fichiers car les commandes d'entré-sortie standards ne fonctionnent pas quand j'utilise SDL... :( )

Mais quand je met a la place de 127.0.0.1 l'adresse IP de quelqu'un d'autre, et que cette personne lance le programme serveur, et bien, ça ne fonctionne pas. J'ai du mal comprendre quelquechose :(

elhuron
elhuron
Niveau 6
20 février 2008 à 19:03:58

J'ai tester en changeant le port au niveau du programme client, sur le port 4149, j'obtiens la chaine "Büv".
Sur le port 4147, la socket est nulle.
L'adresse IP dans chacun des cas : 127.0.0.1
Etrange que j'obtienne quelque chose pour le port 4149.

D'ailleurs, en refaisant le test pour le port 4148, j'obtiens bien ce qu'il y a dans le fichier du dossier Serveur, mais on peut noter un petit rajout : "…Óèúv"

Même quand ça fonctionne, ca fait un peu n'importe quoi... :(

dnob700
dnob700
Niveau 10
20 février 2008 à 20:33:17

je ne connais pas les socket avec SDL,mais est-ce que tu es sûr que c'est un TCP_Open que tu dois faire avec le serveur. Il n'y aurait pas plutôt un TCP_Listen, ou quelque chose dans ce genre ?

Pour l'usage sur des machines distante, as-tu un routeur ? un parefeu ?
Sinon, pour connecter le client au serveur, tu as besoin soit d'un serveur dont l'adresse est connu et auprès duquel s'enregistre ton serveur pour que le client puisse récupérer l'adresse du serveur sur ce second serveur (mais ça ne fait que repousser le problème) soit il faut que ton serveur ai un nom (que le client devra alors connaître). Mais le client doit connaître quelque chose (en plus du port) pour se connecter au serveur.

elhuron
elhuron
Niveau 6
20 février 2008 à 21:15:25

Hum, d'après le tuto que j'ai suivi, c'est bien cela :
http://remram44.free.fr/index.php/sdl-cours/net

J'ai un routeur, parefeu, aucunes idées, sur WindowsMe, c'est pas trop détaillé. Il y a pas non plus d'interfaces qui montrent ma connection, ça fonctionne, c'est déjà ça :)

Mais l'adresse qui permet de reconnaitre le serveur, c'est l'adresse IP, ou équivalent, comme montré en exemple dans le tuto :

SDLNet_ResolveHost(&Hote,"irc.freenode.net",6667);

Mouarf, si ça me pose trop de problèmes, j'arreterai SDL_Net et je passerai a winsock2 et équivalents sous linux. C'est beaucoup plus compliquer, mais il y a plus de tutos, et c'est plus enrichissant.

guyver2
guyver2
Niveau 10
20 février 2008 à 22:01:56

si tu es derrière un routeur (ou une XXX-box) il faut que du coté serveur tu fasse de l'ouverture et de la redirection de ports (sur le routeur, rien a changer sur ton programme).

tu va a l'adresse de ton routeur (192.168.1.1 généralement) et tu trouve l'endroit ou tu peux ouvrir/rediriger des connexions entrantes. Ensuite tu redirige les connexions TCP/IP (pas UDP) entrantes sur le port que tu as choisi (4148 d'apres ton code) vers l'adresse ip LOCALE de l'ordi sur lequel tourne le programme serveur.
Une fois que ton programme serveur tourne, le client distant se connecte en entrant ton adresse ip (celle de ta connexion internet) et le port sur lequel attend ton serveur.

Sinon je n'utilise pas SDL_net, je ne peux donc pas dire si ton code est bon mais si ça marche en local (127.0.0.1) ya pas de raison que ça plante via internet.

J'espere avoir été clair et utile, bonne chance

elhuron
elhuron
Niveau 6
20 février 2008 à 22:47:05

Merci pour ces informations. :)
En effet, sur un jeu, je ne peux héberger de parties, je m'étais renseigné, il fallait agir de façon similaire. Deux problemes identiques donc.

J'ai un routeur, micraDigital/Belkin.
Pour m'y connecter, c'est 192.168.2.1, pas loin :)
J'ai pas le mot de passe sous la main, je tenterai de résoudre cela quand je l'aurai.

Et donc, tous les routeurs/box ont ce genre de problèmes non ? Ils ne peuvent pas rediriger directement sans directives les connexions vers des ordinateurs dont ils ne connaissent pas l'adresse IP locale, et donc, pas la possibilitée de jouer le rôle de serveur.

Pas optimal ce système :(
Il existe des routeurs qui redirigent directement vers le bon ordinateur ?

Et au passage, l'adresse IP locale ne peut être visible par les autres ? Seule l'adresse IP internet est publique alors ? Mais Vu qu'elle peut changer, j'en conclu que l'on peut obtenir l'adresse IP locale d'une quelconque personne, je pense.
Et cette adresse IP locale est caractérisée comment ? La tour et la zone de fabrication ?

dnob700
dnob700
Niveau 10
20 février 2008 à 22:59:26

"Il existe des routeurs qui redirigent directement vers le bon ordinateur ? "

non, le routeur n'a aucun moyen de savoir vers quel ordinateur rediriger les connections.

"Seule l'adresse IP internet est publique alors ? Mais Vu qu'elle peut changer, j'en conclu que l'on peut obtenir l'adresse IP locale d'une quelconque personne, je pense."

Je ne comprend pas ton raisonnement. L'IP internet peut changer ou non selon le FAI ue tu utilise et ta connection. Mais l'IP locale n'est valable qu'à l'intérieur de ton réseau et n'a pas de sens à l'extérieur (typiquement la plupart des réseaux locaux donne des adresses du type 192.168.0.x ou x part de 1 vers 255, la preuve c'est que guyver pouvait prévoir à peu près l'IP de ton routeur).

Pour récupérer une IP locale depuis l'extérieur, il faut qu'elle soit transmise par la machine en question, sinon un ordinateur à l'extérieur à l'impression d'être connecté au routeur.

Tout ces problèmes seront résolu quand on sera passé définitivement àl'IPv6. Là tout le monde aura des adresse publique permanente et il n'y aura plus de problème. Mais pour l'instant, il n'existe pas assez d'adresses IP différentes pour ça.

dnob700
dnob700
Niveau 10
20 février 2008 à 23:02:46

et en dernier point, une IP locale est définit uniquement par la configuration du réseau local (soit au niveau de routeur qui peut attribuer les adresses par DHCP, soit au niveau de chaque machine qui s'attribue elle même une IP). MAis ça n'a rien à voir avec le constructeur.

elhuron
elhuron
Niveau 6
20 février 2008 à 23:58:53

Merci pour ces informations dnob700. :)

Mon raisonnement se basait sur le fait que certains sites disent qu'ils peuvent marquer votre identité par l'adresse IP, or elle change...

Je viens de comprendre le fonctionnement des adresses IP en fonction des routeurs, tous les ordinateurs connectés au routeur ont la même adresse IP, mais l'adresse IP local les différencie.

J'ai réussit a faire fonctionner le programme serveur/client de FVirtman, en tant que client. Un pote a moi jouait le serveur. Par contre, lorsque j'ai testé le serveur et le client sur la même machine, port, 8500, adresse IP, 127.0.0.1, cela n'a pas fonctionné.

Je vais lâcher SDL_Net pour winsock2 et équivalents linux.
Si je rencontre des problèmes, je posterai ici :)

godrik
godrik
Niveau 30
21 février 2008 à 00:07:22

"Il existe des routeurs qui redirigent directement vers le bon ordinateur ? "
"non, le routeur n'a aucun moyen de savoir vers quel ordinateur rediriger les connections."
Il y a de l'upnp sur les connexion udp qui marche a peu pret.
sinon, on pourrait imaginer que lorsque le routeur recoit une connexion sur un port non naté, il probe le réseau a la recherche d'une machine qui a ce port en listen et redirige vers celle ci.
Mais ca n'a vraiment pas l'air d'etre une bonne solution: commetn faire s'il y a deux machine qui ont ce port d'ouvert ? Deplus, on pourrait vouloir que certain port ne soit pas forwardé, alors il faut gerer une liste des port a prober, et une liste qu'il ne faut pas prober...

Finalement, pour répondre a la question de base, je pense que certain routeurs ont une fonctionnalité "redirige tout le traffic entrant vers une IP donné". Cela pourrait correspondre a ce que cherche Elhuron

elhuron
elhuron
Niveau 6
21 février 2008 à 00:22:44

Hum, en effet, redirigé tout vers une IP donné règlerait tout. Je sais pas encore si mon routeur possède cette fonctionnalité, car changer un seul port règlerait un seul problème.
Et pour rediriger automatiquement, suivant ce que tu avances, cla compliquerais encore plus que ça ne l'est :(

Et donc pour lier le client au serveur, comment on donne un nom au serveur ? Parce que passer par un autre serveur, non, comme dit précédemment, ce n'est que repousser le problème.

Au début, je pensais, pour trouver quelqu'un, alterner la phase serveur et écoute, avec la phase client et recherche, mais bon, je pense que je vais demander directement le choix client/serveur, notamment pour les personnes chez qui la phase serveur est impossible sans modifications.

guyver2
guyver2
Niveau 10
21 février 2008 à 00:44:41

sur mon routeur (une livebox) la page de redirection de ports propose de rediriger des plages de ports plutot que de le faire au compte goute. J'imagine que tu doit avoir un truc similaire.

"Et donc pour lier le client au serveur, comment on donne un nom au serveur ? Parce que passer par un autre serveur, non, comme dit précédemment, ce n'est que repousser le problème. "

Qu'entend tu par "lier le client au serveur" ? établir la connexion ?
su tu ne possede pas de nom de domaine tu n'a pas d'autre choix que de donner ton adresse IP a tes clients, le probleme c'est qu'elle change (environs une fois par jour).
Il existe des outils gratuits de "dns dynamic" qui te permettent d'avoir un nom de domaine associé a ton adresse ip et qui se met a jour automatiquement a interval régulier. Certain routeur gere meme eux meme ce genre d'outils.

elhuron
elhuron
Niveau 6
21 février 2008 à 09:56:10

En fait, il faut que j'établisse la connexion entre n'importe quel client avec n'importe quel serveur. Le problème ici est donc de connaître l'adresse IP du serveur.

J'ai trouver deux solutions :

1. Je laisse le client entrer l'adresse IP lui même, a lui de se renseigner.

2. Par mysql, dès qu'un serveur se connecte, son IP est entré dans la base de donné de mon site, dès qu'il rentre en connexion avec un client ou qu'il arrête d'écouter, il est viré de la base de donné.
Donc, chaque client va avoir accès à la liste des adresses IP des ordinateurs qui ont le programme serveur a l'écoute.
A partir de là, il va pouvoir établir une connexion.
Si je choisit cette méthode, je pense plutôt utiliser un fichier texte pour rentrer les adresses IP des serveur, pour ne pas mettre de nom d'utilisateur ni de mot de passe dans les sources.

godrik
godrik
Niveau 30
21 février 2008 à 11:20:05

C'est ce que l'on disait il faut un point commun d'information, un site web, un dns ...

elhuron
elhuron
Niveau 6
21 février 2008 à 14:23:24

J'ai réussi a faire la redirection. Le serveur fonctionne à présent.
Le point commun, je penche vers une page web, pour le client, il récupère la page web via le protocole http, le serveur, lui, va utiliser le php pour modifier la page, sinon il me faut utiliser le protocole ftp, et utiliser mon nom d'utilisateur et mon mot de passe.
Dns, il va falloir que je lie les adresses IP des ordinateurs qui ont lancé le programme serveur a un nom de domaine, mais bon, faut déjà avoir un nom de domaine avec qui intéragir.

Ca va pas être bien simple tout ceci. :)

guyver2
guyver2
Niveau 10
21 février 2008 à 19:16:35

pour le nom de domaine, ça peut etre réglé tres simplement, et surtout ça t'evite toute la partie (http/ftp/...).

Je sais que ma livebox gere ce genre de service.

Personnelement j'utilise un compte (entierement gratuit) chez https://www.dyndns.com/ qui permet de choisir une adresse web (avec une extension un peu bizarre certe mais quand meme) qui se met a jour automatiquement si ton serveur change d'ip.

Je tourne sous linux et je ne me sert pas du routeur pour gerer les mise a jour d'adresse mais d'un petit programme (je doute qu'il existe sous windows si c'est ce que tu utilise)

par exemple :
http://whoisonfire.mine.nu
est un des nom de domaine qui pointe vers mon serveur perso (hebergé sur un vielle ordi qui utilise mon abonnement orange)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment