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 :

deserialisation d'objet envoyé par socket


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut deserialisation d'objet envoyé par socket
    salut,
    j'ai un pb avec une comunication par socket entre deux machines l'une comme client et l'autre serveur qui envoie des fichiers aux client ,mais au niveux client quand je recois l'objet et essayé de déserialisé avec la classe Bean qui situé au machine serveur pour sérialisé et au niveaux machine client pour déserialisé elle m'affiche le problème suivant au niveau client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    java.lang.ClassNotFoundException:packageMachineServer.Bean
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at java.io.ObjectInputStream.resolveClass(Unknown Source)
        at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at packageMachineclient.Client.<init>(Clientstream.java:16)
        at packageMachineclient.Client.main(Clientstream.java:37)
    la ligne 16 est:
    Bean fileIO=(Bean)ois.readobject();

    et voila mon code de seveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    package packageMachineServer;
    import java.io.*;
    import java.net.*;
    public class Server{
    public Server() {
         File[] filenvoye = new File[1];
         filenvoye[0] = new File("/home/workspace/testEfile");
        //sérialiser       
          Bean files = new Bean(filenvoye);
          OutputStream os;
          ServerSocket socket;
          try {
               ObjectOutputStream oos;
               System.out.println("En ecoute .......");
               socket = new ServerSocket(1024);
               Socket SsAccept;
               while(true){
               SsAccept = socket.accept();
               //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                os = SsAccept.getOutputStream();
                   oos = new ObjectOutputStream(os);
                   //envoyer les donne
                   oos.writeObject(files);
                   System.out.println("les donne sont envoyer;;;;;;;;");
                   }
                //os.close();
                   //oos.close();
                   //SsAccept.close();
                   } catch (UnknownHostException e) {
                   e.printStackTrace();
                   } catch(IOException exp){
                        exp.printStackTrace();
               }
               //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
              }
     
        public static void main(String[] args) {
            new Server();
        }
    }
    et ma classe au niveux client est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    package packageMachineclient;
    import java.io.*;
    import java.net.*;
    public class Client {
        public Client() {
         Socket socket;
         try {
         socket = new Socket("192.186.0.133",1024);
         //On ouvre notre flux d'entrée
         InputStream is = socket.getInputStream();
         ObjectInputStream ois = new ObjectInputStream(is);
         //On cast l'objet pour en retirer les informations
         Bean fileIO = (Bean)ois.readObject();
         String texte = new String(" ");
         for (int i=0;i<fileIO.lenght();i++){
         fileIO.redfile(i);
         //Affiche la liste des fichiers qui ont été envoyés
         System.out.println("Le fichier est :"+fileIO.getFile(i).getPath());
         texte+=fileIO.getFile(i).getPath();
         texte+='\n';
         }
         ois.close();
         is.close();
         socket.close();
         } catch (IOException e) {
          e.printStackTrace();
         }
         catch (ClassNotFoundException e) {
         System.out.println("voila mon problem"+e.getCause());
         e.printStackTrace();
         }
         }
         public static void main (String []arg){
            new Client();
         }
         }
    et enfin pour la classe Bean de sérialisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import java.io.*;
    import java.net.*;
    public class Bean implements Serializable{
     private static final long serialVersionUID = 1L;
     private File[] file;
     private int lenght;
     public Bean(File[] file) {
          super();
           this.file = file;
           this.lenght=file.length;
        }
       public int lenght() {
            return lenght;
        }
     
        public File getFile(int i) {
            return file[i];
        }
    }
    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Par défaut
    La classe Bean est dans les 2 packages ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Par défaut
    +1 pour louveteau02

    tu devrais te faire un troisième jar contenant les données qui peuvent transiter sur le réseau et ajouter ce jar dans le classpath ton serveur et de ton client

    car c'est normal que le serveur ne connaisse pas la classe packageMachineServer.Bean

  4. #4
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut
    Salut,
    -oui la classe Bean est dans les 2 packages,
    Bean a situé au packageMachineServer avec la classe Serveur dans la machine de serveur et danse le package package Machineclient avec la classe Client au machine client
    -Et pour la 2 solution stp comment je peut ajouter le 3 jar dans le classpath au serveur et au client
    Merci

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Par défaut
    En fait les beans packageMachineServer.Bean et packageMachineclient.Bean sont différents du fait qu'ils n'appartiennent pas au même package.

    Une solution serait de créer un troisième package nommé packagebean par exemple dans lequel tu mets ton bean.
    Ensuite tu importes ce package dans la classe Client et la classe Serveur.

  6. #6
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut
    salut,
    comment je peut importer ce package ?malgré que Bean.class a situé au packageMachineServer avec la classe Serveur dans la machine de serveur et danse le package package Machineclient avec la classe Client au machine client
    merci

Discussions similaires

  1. Envoyer Objet / Structure par socket TCP
    Par crazy33 dans le forum C++
    Réponses: 5
    Dernier message: 21/11/2010, 20h49
  2. [Serialisation]Transfert d'objet(s) par un socket
    Par Yan17 dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 25/07/2007, 11h38
  3. [debutant] Int envoyés par sockets
    Par vincentweb dans le forum Débuter
    Réponses: 5
    Dernier message: 15/01/2007, 21h52
  4. envoye fichier par socket
    Par ac/dc dans le forum Réseau
    Réponses: 3
    Dernier message: 01/12/2006, 20h46
  5. [Socket] Envoi de texte et d'objets par socket
    Par ced dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 05/08/2004, 09h07

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