Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1309 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Comment echanger un "objet" entre un client et un serveur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment echanger un "objet" entre un client et un serveur

n°1485670
asirem
Posté le 03-12-2006 à 17:27:18  profilanswer
 

Bonsoir à tous !  
voilà je développe en ce moement un jeu en Java et je dois le mettre en réseau !  
 
Le pb qui e pose est "comment echanger un objet (l'état du jeu à un moment donnée) entre un client et un serveur.
J'ai réussi à echanger des données ente un client et un serveur avec DataXXXStream et XXXStream mais ces 4 classes n'offrent pas la possiblité d'échanger des objet java (enfin je pense). on jeux juste echanger des données de type primitif.
 
J'ai essayé d'utiliser sles classes ObjectXXXStream mais le client et le serveur bloquent quand je fait par exemple :
ObjectInputStream canalLecture = new ObjectInputStream(socketClient.getInputStream()) ;
 
Voilà ! si qqn peux m'aider pour résoudre ce pb !
Merci à tous et Bonne fin de journée !
@ +

mood
Publicité
Posté le 03-12-2006 à 17:27:18  profilanswer
 

n°1485681
esox_ch
Posté le 03-12-2006 à 17:39:43  profilanswer
 

T'a essayé de serialiser l'objet avant de l'envoyer?
 
Parcontre je vois pas trop le but de ce que tu veux faire


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1485686
asirem
Posté le 03-12-2006 à 17:42:42  profilanswer
 

Oui ! pour la sérialisation j'ai essayé de faire ça mais ça n'a pas marché.
 
Ce que je veux faire c'est echanger une structure de donnée complexe entre un client et un serveur ( je veux echanger la configuration du jeu). si j'arrive à faire ça ! je crée un serveur qui pourra mettre en relation deux clients (donc deux joueurs) pour qu'ils puissent jouer en reseau au jeu que je suis en train de développer.
Merci

n°1485687
asirem
Posté le 03-12-2006 à 17:47:58  profilanswer
 

Voici le code du client :
 
..........................................................
package client02;
 
import java.io.*;
import java.net.*;
 
public class Client implements Serializable{
 /**
  *  
  */
 private static final long serialVersionUID = 1L;
 protected static final int PORT=4555 ;
 
 public static void main(String[] args) {
  Socket socketClient = null;
  try {
   // creation de la socket client avec l'adresse du serveur et le numero  
   // du port .
   socketClient = new Socket(args[0], PORT) ;
 
   //création d'un canal pour lire les données de la socket.
   
   ObjectInputStream canalLecture = new ObjectInputStream(socketClient.getInputStream()) ;
   System.out.println("ca bloque" );
   //création d'un canal pour lire les données de la console .
   DataInputStream console = new DataInputStream(System.in) ;
 
   // création d'un canal pour afficher les données.
 
   ObjectOutputStream canalEcriture = new ObjectOutputStream(socketClient.getOutputStream()) ;
 
   // confirmer l'établissement d'une connexion .
   if(socketClient.isConnected())
    System.out.println("Connection établie: "+socketClient.getInetAddress()+" port: "+socketClient.getPort());
 
   //récupérer des lignes du serveur et les afficher sur la console.
   int entier;
   
   while(true) {
    for(int i=10;i<100;i++){
     console.readLine();
     canalEcriture.write(i);
     entier=canalLecture.read();
     System.out.println(entier);
    }
     
   }
  }
  catch(Exception e) {e.printStackTrace();}
 }
}
..........................................................
 
mais ça bloque à la ligne :
ObjectInputStream canalLecture = new ObjectInputStream(socketClient.getInputStream()) ;  
 

n°1485857
asirem
Posté le 04-12-2006 à 09:19:46  profilanswer
 

Alors ? personne ne vois comme tn i faut faire ? :non:

n°1486276
doctib
Posté le 04-12-2006 à 18:06:09  profilanswer
 

tu as pensé à utiliser RMI?
 
ça pourrait être beaucoup plus simple (d'une certaine manière :D)

n°1486576
asirem
Posté le 05-12-2006 à 12:18:45  profilanswer
 

c bon ! j'ai une reponse au pb ! c bete en fait : il falait juste faire :
protected ObjectOutputStream canalSortie;
protected ObjectInputStream canalEntree;
 
Puis mettre :
canalSortie=new ObjectOutputStream(laSocketClient.getOutputStream());
canalEntree=new ObjectInputStream(laSocketClient.getInputStream());
 
Au lieu de :  
canalEntree=new ObjectInputStream(laSocketClient.getInputStream());
canalSortie=new ObjectOutputStream(laSocketClient.getOutputStream());
qui provoque soit une exception de type : StreamCorruptedException
 ou fait que l'exécution bloque à la ligne :
canalEntree=new ObjectInputStream(laSocketClient.getInputStream());
 
Merci pour pour tout les gens qui ont essayé de m'aider !
Slt !

n°1487142
doctib
Posté le 06-12-2006 à 12:44:06  profilanswer
 

problème d'autoblocage??
il essaye de lire quelque chose qui vient du réseau alors qu erien n'arrive??
 
Toujours auvrir le flux de sortie (ecriture ) d'abords :)
surtout quand tu travail sur le réseau (c'est bloquant)

n°1489131
asirem
Posté le 09-12-2006 à 22:26:45  profilanswer
 

Oui ! mais c'étais pas ça le pb ! j'essayais pas de lire des données du reseau le pb c'est que il fallais asigné un flux de sortie à la socket avant le flux d'entrée ! c'et une bizarerie de Java ! c'est ce que mon prof de java m'a dis ! sinon ! c'est bon j'ai terminé "mon application réseau" et j'ai rendu le rapport de mon projet ! mais pour l'instant il ne supporte que deux clients ! il attends que deux clients se connectent puis ils les mis en relation. Je vais essayer d'étendre ça après les exams !  
 
mais ce que je sais pas comment faire  c'est comment lancer le serveur du jeu sur mon site internet ! c'est possible de faire ça ??
 
Merci beaucoup !
à plus

n°1489164
moi23372
Posté le 10-12-2006 à 10:37:39  profilanswer
 

une bizzarerie de JAVA. lol
ce n'est pas bizzare mais logique...  
pour ce qui est via ton site web, laisse tombé pour passer avec http. Soit tu recrées un serveur direct toi même soit tu passes par des web services...

mood
Publicité
Posté le 10-12-2006 à 10:37:39  profilanswer
 

n°1489390
doctib
Posté le 11-12-2006 à 09:59:56  profilanswer
 

moi23372 +1
 
ce n'est aps bizzard: il essaye de lire l'entrée de la socket, et il attends quelque chose. Tant qu'il n'a rien reçu il ne passe pas à la ligne suivante.
 
si tu veux pouvoir avoir plus de deux client, il va falloir que tu passes par des Threads


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Comment echanger un "objet" entre un client et un serveur

 

Sujets relatifs
Communication Client Java avec une Servlet via HTTPS / SSLopengl et objet
Compte a rebour heure serveurpb fonction opendir() sur serveur distant
programme serveur /client[PHP]contourner des fonctions bloquées(serveur Free)
VISUAL STUDIO 2005 -> Serveur IIS Virtuel 
Plus de sujets relatifs à : Comment echanger un "objet" entre un client et un serveur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR