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

Développement Discussion :

Le réseau dans un jeu ?


Sujet :

Développement

  1. #1
    Membre averti Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Points : 358
    Points
    358
    Par défaut Le réseau dans un jeu ?
    Salut !
    Je suis en train de créé un jeu en C++ avec l’opengl et j’en suis a la partie réseau.
    J’ai utilisé la méthode suivante :
    A chaque réactualisations de l’encrant (environ 100 FPS) si un objet à changé de position, les nouvelles coordonnées de cette objet son envoyé par socket a l’autre pc pour qu’il puisse lui aussi le faire changer de position.
    Malheureusement, le déplacement des objets par le réseau n’est pas fluide même en réseau local. Et la taille des messages de déplacement ne font que quelque 27 Octets ce qui est loin de surcharger le réseau local ...

    Comment puis-je faire pour arranger cela ? Existe-t-il une autre méthode ?
    Savez vous quel méthode utilise les jeux a la doom ?

    Merci d'avance de vos éventuelles réponses ^^

  2. #2
    Membre expérimenté
    Avatar de Aramis
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 493
    Points : 1 638
    Points
    1 638
    Par défaut
    Bonjour,

    le manque de fluidite est peu etre du a la maniere avec laquelle vous envoyez vos donnes. Je sais par experience que lorsque le protocole TCP est employe il faut souvent faire en sorte que la communication se fasse de maniere asynchrone (que ce soit avec des threads ou bien en CallBack). La raison est tres simple, comme vous l'avez constater le reseau est non-determinisitic c'est a dire qu'il n'est pas possible de savoir exactement quand les evenements vont se derouler. C'est pourquoi si vous developpez autrement qu'avec les deux methodes citees la communication sera bloquante; toute autre tache sera suspendu en attendant que l'exchange d'info soit termine.

    Il me semble que pour contourner ce probleme les jeux du style Quake 3 et HL I & II utilise, TCP pour la communication initiale (c'est a dire l'arrive sur le serveur) mais tout exchange de donnees se fait en UDP. Le serveur envoie les infos tant que les clients n'ont pas repondu... (jusqu'a un certain point bien sur ).

    Pourquoi ne pas satisfaire votre curiosite avec votre jeux prefere et lancer une capture Ethereal pour savoir se qui se passe?

    Ar@mi$

  3. #3
    Membre averti Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Points : 358
    Points
    358
    Par défaut
    Tout d’abord, merci pour votre réponse.
    Effectivement, je me suis aperçu que pour la réception, la fonction recv été bloquante, bloquant ainsi le programme temps que la transmission du message entre les 2 PC ne soit pas termine.
    J’ai donc créé un thread qui s’occupe de recevoir et de traiter les messages reçu.
    Pour ce qui est de la fonction send, il ne me semble pas que celle ci pose problème et je fais appelle a cette fonction au sain même du programme principale.

    Pour ce qui est des protocoles à utiliser comme TCP, UDP ou autre... le problème vient sûrement de la car j’y connais rien la dedans pour ce qui est des caractéristiques et autre...
    Je me connecte de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    Si non pour ce qui est de faire une capture Ethereal, cela est une bonne idée, je vais essayer de fouiner un peu voir si je trouve quelque chose d’intéressent =)

    Merci

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Envoyer les données selon e FPS, c'est un peu casse-gueule si plusieurs PCs communiquent mais n'ont pas la même puissance, le jeu sera bridé par le plus lent !
    Le protocole TCP impose un accusé de réception, pas le protocole UDP, donc il est plus rapide, à priori.

  5. #5
    Membre averti Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Points : 358
    Points
    358
    Par défaut
    Salut,
    Ca y est je me connecte maintenant en UDP et effectivement, il n’y a plus de problème... enfin les déplacements ne son plus saccadé en tout cas ^^
    Par contre j’ai un nouveau problème :^/ lorsque l’un des deux pc n’est pas connecter directement sur internet mais passe par un serveur, rooteur ou autre, la connexion ne passe plus...

    Pour répondre a Miles, effectivement se basé sur les FPS c’est un peu casse-gueule mais pas autant que tu le dit... si le PC d’en face n’a que 10 FPS, seule le rafraîchissement de son personnage sur mon écran sera de 10 FPS pour le décor, c’est mon pc qui calcule et qui rafraîchir a sa propre vitesse.

    Merci pour votre aide

  6. #6
    Membre expérimenté
    Avatar de Aramis
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 493
    Points : 1 638
    Points
    1 638
    Par défaut
    Citation Envoyé par Ekinoks
    Par contre j’ai un nouveau problème :^/ lorsque l’un des deux pc n’est pas connecter directement sur internet mais passe par un serveur, rooteur ou autre, la connexion ne passe plus...
    Re,

    lorsque je jouais a Dawn of War a partir de chez mes parents j'utilisais un modem ADSL et un firewall (ZoneALarm). Meme jeu mais chez moi cette fois, router et paf ca ne marche plus.... Oui, le firewall sur la machine local peut tres bien empeche l'utilisation du protocol UDP (UDP = tres dangereux pour l'internet ). Ensuite, il se peut que les clients "distants" doivent ouvrir les ports necessaires sur leurs routeurs/servers et etc pour que tout ce passe bien....

    Ar@mi$

  7. #7
    Membre averti Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Points : 358
    Points
    358
    Par défaut
    Ha d’accord, ça explique tout... et es que par hasard, il n'existe pas un port pas le quel je puisse passer en UDP et ou les firewalls et rooteur le laisse ouvert ?
    Un peu comme le port 80, 21... ?

  8. #8
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Un administrateur réseau consciencieux fermera TOUS les ports, en entrée de son réseau, et ne les rouvrira que sous la pression des utilisateurs mécontents qui lui présenteront un besoin REEL !

    On traduit parfois "Firewall" par "Garde-Barrière" ... C'est le rôle effectif. Si le garde-barrière, comme un vigile d'entreprise, laisse passer un peu n'importe quoi, il ne sert à rien.

    Le port 80 est ouvert, parce qu'il y a un besoin.

    Le port 21 est de moins en moins souvent ouvert - perso, je le ferme systématiquement.

    Les ports 25 (SMTP) ou 53 (DNS) ne doivent être ouverts qu'avec parcimonie.

    Pour le reste, la prudence recommande la fermeture jusqu'à plus ample informé.

  9. #9
    Membre averti Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Points : 358
    Points
    358
    Par défaut
    Ha ok ! Donc si j’ai bien compris je peu choisir le port que je veux, il n’existe aucun port UDP que les Firewall laisse gentiment ouvert ?

    Merci

Discussions similaires

  1. Réseau dans un jeu tel que League of Legends
    Par saturn1 dans le forum Réseau et multijoueurs
    Réponses: 3
    Dernier message: 10/10/2011, 14h26
  2. déplacements dans un jeu en réseau 2D
    Par mytrill dans le forum Réseau et multijoueurs
    Réponses: 8
    Dernier message: 05/10/2010, 02h08
  3. objets à utiliser dans un jeu réseau
    Par slouma_b_h dans le forum Réseau et multijoueurs
    Réponses: 13
    Dernier message: 03/10/2009, 18h57
  4. L'intêret du multi connexion dans un jeu réseau
    Par Fabien Henon dans le forum Réseau et multijoueurs
    Réponses: 7
    Dernier message: 25/11/2008, 13h22
  5. Du réseau dans les jeux
    Par Mathieu.J dans le forum Développement
    Réponses: 3
    Dernier message: 07/05/2004, 16h33

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