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

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 11
    Points
    11
    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 du Club
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Points : 63
    Points
    63
    Par défaut
    La classe Bean est dans les 2 packages ?

  3. #3
    Membre habitué
    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
    Points : 170
    Points
    170
    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 à l'essai
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 11
    Points
    11
    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 du Club
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Points : 63
    Points
    63
    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 à l'essai
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 11
    Points
    11
    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

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Points : 63
    Points
    63
    Par défaut
    Tu crées 3 packages :
    - packageBean
    - packageMachineclient
    - packageMachineServer

    Tu ajoutes respectivement dans chaque package les 3 classes:

    - Bean.java

    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
     
    package packageBean;
    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];
        }
    }
    - 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    package packageMachineclient;
    import java.io.*;
    import java.net.*;
    import packageBean.Bean;
     
    public class Client {
        public Client() {
         Socket socket;
         try {
         socket = new Socket("adresse ip",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.getFile(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();
         }
         }
    - Server

    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
    41
    42
    43
     
    package packageMachineServer;
    import java.io.*;
    import java.net.*;
    import packageBean.Bean;
     
    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 pour tester tu mets le packageBean sur le serveur et le même package bean sur le client

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Ce problème a réglé avec le 3 jar qui contient Bean.class mais le problème est SVP comment je peux récupérer les données de ce fichier ? Est ce que il faut d'ajouter une autre méthode au ma classe Bean qu'a lu les donné de ce fichier ?

    Parce que mon classe de sérialisation Bean.class peut récupérer juste le chemin de fichier donc j'ai ajouté une méthode qu'a lu le contenu de ce fichier et mis dans ArrayList mais quand je déserialise il affiche des erreurs au niveau 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