Même les jeux 100% client / serveur ont parfois des problèmes lorsque le client est derrière NAT. Les jeux de pipi sont encore plus importants. Certains jeux doivent utiliser plusieurs transports (comme UDP et TCP) ou plusieurs connexions (comme un port UDP différent pour la voix).
Quels sont les moyens de s'assurer qu'un jeu fonctionne de manière fiable lorsqu'il s'exécute derrière un routeur NAT?
- Peer-Peer: Aucun serveur centralisé n'existe. Le joueur A commence une partie et le joueur B veut se joindre
- Client-Serveur: Un serveur centralisé sur une adresse bien connue (nom d'hôte) accepte toutes les connexions entrantes. Chaque client communique uniquement avec ce serveur.
- Combo: où le serveur est juste un matchmaking, mais les mises à jour du jeu sont peer-peer. Différents pairs peuvent voir chaque joueur avec un IP / port différent potentiellement (par exemple, certains clients sont derrière le même NAT et certains sont sur un routeur différent)
la source
Ne demandez pas à un client d'informer le serveur ou l'homologue de sa propre adresse. En d'autres termes, n'intégrez pas l'IP du client A dans un paquet de jeu et demandez au client B ou au serveur de répondre à cette adresse. Répondez toujours à l'adresse / au port d'origine du message.
Minimisez les différents ports UDP ou TCP utilisés pour le jeu. Cela facilite la configuration des règles NAT.
Autorisez l'utilisateur à remplacer le port par défaut utilisé dans le jeu. De cette façon, plusieurs serveurs peuvent être hébergés derrière le même NAT.
la source
Avec d'autres réponses, utilisez une roue existante: http://miniupnp.free.fr/ Cette bibliothèque combat presque tous les ennuis sous forme de fonction, vous donnant le contrôle sur quand et comment frapper et tirer :)
la source