Bonjour a tous,
voila j'essai de faire un petit programme de test simple pour tester l'echange d'objet entre un client et un serveur a l'aide de socket et je me heurte a un probleme.
L'objet que je tranfere est un objet de la classe Echange :
J'utilise netbeans et j'ai crée 2 projets, un projet testclient et un projet testserver. Dans chaque projet j'ai crée une classe Echange ou j'ai copié collé le meme code.
(je pense que le probleme vient de la : peut etre qu'a lexecution il considere que ce sont 2 classes differentes?)
Voila le code de la classe echange :
Code :
- package testclient;
- import java.util.*;
- import java.io.*;
- public class Echange implements Serializable{
-
- int x;
-
- public Echange() {
- }
-
- public Echange(int x) {
-
- this.x=x;
- }
-
- }
|
Voila le code du serveur :
Code :
- package testserver;
- import java.net.*;
- import java.util.*;
- import java.io.*;
- public class Main {
-
- public Main() {
- }
-
- public static void main(String[] args) throws Exception
- {
- ServerSocket ss = new ServerSocket(2000);
- Socket s=ss.accept();
- ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
- ObjectInputStream in = new ObjectInputStream(s.getInputStream());
- Echange transfert = (Echange)in.readObject();
-
- System.out.println(transfert.x);
- }
-
- }
|
Et enfin le code du client :
Code :
- package testclient;
- import java.io.*;
- import java.net.*;
- import java.util.*;
- public class Main {
-
- public Main() {
- }
-
- public static void main(String[] args) throws Exception
- {
-
- Socket s = new Socket("localhost",2000);
- ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
- Echange transfert = new Echange(42);
-
- out.writeObject(transfert);
- }
-
- }
|
Donc a priori , rien de bien compliqué. Lorsque je lance le serveur et que je tente de me connecter dessus, j'obtiens l'erreur suivante: (c'est la ligne du readObject() qui la cause)
Code :
- Exception in thread "main" java.lang.ClassNotFoundException: testclient.Echange
- 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 testserver.Main.main(Main.java:36)
|
Je pense que cela vient donc des 2 fichiers differents pour designer la meme classe .. Peut on partager une classe entre 2 projets dans netbeans?
Peut etre que je me trompe totalement et que c'est autre chose ! Quelqu'un aurait t'il une idée?
Merci !
Message édité par Phraides le 22-06-2006 à 17:33:55