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

avec Java Discussion :

Problème dans une application en réseau


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 15
    Par défaut Problème dans une application en réseau
    Bonjour ou bonsoir à tous

    Je suis actuellement en train de coder un petit pong basique en ligne (donc 1v1).

    Pour se faire j’ai donc une application client et une application serveur.

    Dans le serveur, chaque fois qu’un client se connecte, un thread d’écoute (MsgIn dans le programme serveur) se crée et en fonction des actions du client/des clients, des messages (MsgOut) sont envoyés à ces derniers.

    Au niveau du client, il y a un thread d’écoute (GameSockIn) qui récupère les données qui sont envoyées par le serveur et un thread d’envoie de données (GameSockOut) au serveur.

    Je lance mon serveur et mes 2 clients sur le même ordinateur.

    Jusqu’ici tout va bien, le serveur se lance sans souci, les 2 clients aussi.

    Mais lorsque je fais des actions en continu sur un client (donc bouger la raquette), l’action n’est pas retranscrite parfaitement sur le 2ème client. Il y a comme une impression de « lag ».

    Par moment même, par exemple, la balle se déplace de façon X sur le client 1 et sur le client 2 la balle est déjà en dehors de l’écran, etc.

    Les données qui sont transmissent entre les applications sont des simples « string ».

    J’aimerai savoir où pourrait être le problème dans mon/mes application(s), et éventuellement quel(s) point(s) je pourrais améliorer pour une première application en réseau.

    Tous conseils au niveau de la façon de coder, ou autres sont les bienvenus

    Merci pour votre aide éventuelle.

    Le serveur : http://getfreakzz.esy.es/ServeurPong.zip

    Le client : http://getfreakzz.esy.es/PongNet.zip

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Citation Envoyé par GetFreakz Voir le message
    Les données qui sont transmissent entre les applications sont des simples « string ».
    Qu'echange tu concretement ? (je ne parle pas du message d'accueil ^^)

    Est-ce le serveur qui gère "la physique" des raquette et de la balle en fonctions des input clavier du client, client qui recoit les positions que le serveur connait et calcul ? (autrement dit, le client ne fait qu'envoyer des actions des touches et reçoit les positions que le serveur aura calculé. Le serveur recoit les input, reagit en conséquence, calcule les positions, les renvoyes au client).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 15
    Par défaut
    Salut, et merci pour ta réponse.

    En gros, les clients envoient uniquement les positions de la raquette au serveur. Le serveur récupère les positions en temps réel, le stocke dans un tableau. Le serveur renvoie la position à l'autre client correspondant, et ainsi de suite.

    Le serveur transmet des ordres comme : créer la balle (lorsque 2 clients sont connectés), lancer la balle dans une direction (si il y a une collision avec une raquette, la balle part dans un sens ou dans l'autre aléatoirement). C'est le serveur qui calcule les collisions de la balle avec les raquettes ou les "murs".

    Au niveau de la position de la balle, le serveur envoie simplement (par exemple : ballRight, ballLeft, ballUp, ballDown) au client. Le client calcul la trajectoire de la balle (par exemple si le client a reçu un message du serveur de type ballRight, la balle ira à droite).
    Le même calcul se fait au niveau du serveur (donc si le serveur a ballRight à true, la position en X de la balle va s'incrémenter)

    Le serveur n'envoie pas la position en X et Y de la balle en temps réel aux deux clients, uniquement des messages droite, gauche, bas, haut.
    Je ne comprends pas le souci, puisque chaque client reçoit le même message, mais par moment, la balle ne réagit pas de la même façon sur les clients.

    Sinon, le problème n'est pas uniquement au niveau de la balle, mais aussi au niveau des mouvements de la raquette.
    Par exemple : si le client 1 bouge la raquette de haut en bas en continue, pas de problème, mais quand on regarde au niveau du client 2, la raquette correspondante ne bouge pas de la même manière, il y a parfois un décalage ou une impression de lag.

    Et petite précision, j'utilise TCP, je sais que c'est moins rapide que de l'UDP, mais je ne crois pas que le problème devrait venir de là. Au niveau de l'envoie de messages, ce sont des strings du stype : serveur-créerball ou encore move-248 (248 pour la position en Y de la raquette).

    J'espère que ces informations pourront t'aider, je débute dans le réseau donc une grande partie du problème doit se trouver ici haha.

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Ben essaye en faisant "le client ne fait qu'envoyer des actions des touches et reçoit les positions que le serveur aura calculé. Le serveur recoit les input, reagit en conséquence, calcule les positions, les renvoyes au client".

    Car ta méthode me semble bizarre mais bon je n'ai jamais fait ce genre de choses non plus ^^
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 15
    Par défaut
    Merci, je vais tester ça. Je compte reprogrammer les applications de 0 étape par étape pour voir un peu d'où pourrait venir le souci.

    Tu as testé le programme de ton côté pour voir si ça fait la même chose au niveau des raquettes?

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Oui mais quand je deplace la raquette du client 1 je ne vois pas qu'elle bouge dans client 2, par contre on dirait que la collision se fait quand même ou il faut. (la balle bouge des 2 cotés ça oui aussi).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. probléme d'adresse IP dans une application réseau
    Par slim_java dans le forum VirtualBox
    Réponses: 4
    Dernier message: 16/08/2010, 21h24
  2. Réponses: 40
    Dernier message: 21/06/2007, 17h58
  3. problème de socket dans une application win32
    Par deck_bsd dans le forum Windows
    Réponses: 5
    Dernier message: 20/01/2007, 18h32
  4. [Forum] Login dans une Application PHP
    Par ChrisColumbus dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 19/11/2006, 02h49

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