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

Entrée/Sortie Java Discussion :

Communication réseau et corruption de données


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Communication réseau et corruption de données
    Bonjour à tous!

    Je développe actuellement un BlackJack en réseau en java dans le cadre d'un projet d'école. Le but est de créer un serveur (sans interface graphique) où vienne se connecter jusqu'à 5 clients pour jouer au Black Jack. Je rencontre actuellement un problème très inquiétant au niveau de la communication et sur lequel j'ai déjà passé de nombreuses heures...

    Voici globalement l'architecture de mon programme du côté serveur :
    - Une classe ArrayServer qui est un thread et qui sert simplement à instancier une autre classe serveur contenant toutes les méthodes de communication (envoi d'objet via une sérialisation, envoi de message de type String, etc...) et des informations sur le serveur lui-même (le nombre de joueur connecté, etc..).

    - Une classe ThreadClient qui gère en fait la connexion d'un nouveau client (un thread est lancé à chaque fois qu'un nouveau client se connecte). Ce thread se charge de créer les différents reader et writer pour établir une communication entre le serveur et le client. Ces reader et writer sont ensuite stocké dans un objet Client qui est stocké dans une ArrayList sur le serveur.

    - Une classe ThreadRegle qui gère le déroulement de la partie.

    Voici grossièrement l'architecture de mon serveur. Les problèmes que je rencontre sont les suivant :

    - Lorsque j'envois du serveur un objet sérialisé, tout fonctionne. A partir du moment, où le client envois une réponse au serveur (de n'importe quel type, String,Objet, etc...) les données sont corrompues (pour les objets, cela génère une exception et pour les strings, deux caractères "??" apparaissent devant le String.
    - Si le serveur commence par envoyer un message de type String, la donnée est directement corrompu du côté client avec les deux caractères "??" qui apparaissent.

    La communication réseau se fait en TCP/IP (avec Socket et ServerSocket simplement), et les writer et reader ne peuvent pas être fermé sans quoi la connexion client/serveur est rompu. La version de javac utilisé est la 1.5.
    Voila, dans l'espoir que quelqu'un puisse m'aider...La fin de mon projet approche à grand pas, et je ne sais plus quoi faire.

    Merci d'avance!

    Elthenia

  2. #2
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Bonjour,

    Peux tu montrer tes sockets (utilises les balises code par contre pour encadrer tes sources). Tu n'es peut être pas obligé de montrer tout ce qui est connexion, bind... vu que tu sembles avoir un échange qui se fait entre ton client et ton serveur; mais plutot comment tu gères l'écriture et la lecture sur tes sockets.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour zorn et merci de t'intéresser à mon problème. Bon après voir bossé intensément hier dessus, la solution et la cause du problème ont été trouvé. L'ouverture d'un PrintWriter ou d'un BufferedReader ou d'un ObjectOutputStream spécialise le socket en fait. C'est à dire que vous ne pouvez ouvrir qu'un seul type de writer ou de reader sur un socket, dans le cas contraire, vos données seront corrompus...

    Je suis plutôt surpris et déçu de rencontrer une telle limitation dans Java mais j'ai tout de même réussi à trouver une solution qui est de sérialiser un objet contenant simplement un String pour pouvoir ainsi envoyer des messages sur le réseau.

    Problème résolu donc!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/05/2015, 10h15
  2. Voir les communications réseau
    Par Phiss dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 11/01/2007, 09h25
  3. Débutant: mettre en réseau une base de données
    Par jrogron dans le forum Access
    Réponses: 2
    Dernier message: 22/08/2006, 22h59
  4. Corruption des données téléchargées sur le net
    Par Matthieu Brucher dans le forum Administration
    Réponses: 5
    Dernier message: 27/09/2005, 08h58
  5. Réponses: 4
    Dernier message: 07/02/2005, 16h12

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