Transmettre des classes par socket

cs_indigofox Messages postés 2 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 22 mars 2005 - 22 mars 2005 à 01:16
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 - 22 mars 2005 à 17:07
Bonjour,
je voudrais transmettre des classes par socket. j'ai fait :
public class NetworkClassLoader extends ClassLoader {
private String host;
private int port;


/**
* @param host
* @param port
*/
public NetworkClassLoader(String host, int port) {
super();
this.host = host;
this.port = port;
}


public Class findClass(String name) {
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
}


private byte[] loadClassData(String name) {
try {
Socket sock = new Socket(InetAddress.getByName(host), port);
InputStream in = sock.getInputStream();
ByteBuffer bb = ByteBuffer.allocate(2048);
byte [] buff = new byte[1024];
while (in.read(buff)!=-1) {
bb.put(buff);
}
return bb.array();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

private byte[] loadClassData2(String name) {
try {
System.out.println("net: open");
DatagramChannel chan = DatagramChannel.open();
System.out.println("net: connect");
if (chan.connect(new InetSocketAddress(InetAddress.getByName(host), port))==null || chan.isConnected()==false) {
System.out.println("pas connecter");
return null;//chan.
}
ByteBuffer bb = ByteBuffer.allocate(2048);
System.out.println("net: read");
while (chan.read(bb)!=-1) {
System.out.println("ecrit ds le bytebuffer");
}
return bb.array();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
mais il me fait


Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value -1393754107 in class file Ess
lorsque je lui trnmet la class Ess et que je fais findClass("Ess") sur localhost

merci de votre aide

3 réponses

cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
22 mars 2005 à 09:13
Salut



Juste une question : quel est l'objectif de ce programme ??? Je pense
que tu es parti dans une mauvaise direction ... bien que cette exemple
fasse parti de la javadoc ... sinon où l'as-tu trouvé ???



@+
0
cs_indigofox Messages postés 2 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 22 mars 2005
22 mars 2005 à 14:46
j'ai pris cet exemple de la javadoc mais j'ai implementé loadClassData.
en fait l'objectif du programme que je veux faire est de transmettre des objets par socket. ca marche qd j'ai déjà la source de la classe, mé je voudrais recevoir des objets dont je n'ai pas la source (ni le .class).
a ton avis comment doit-je mis prendre?
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
22 mars 2005 à 17:07
Salut



En fait cette technologie existe déjà et s'appelle RMI pour Remote
Method Invocation cela permet de faire de l'objet distribué ... google
ou java.sun.com pour plus de renseignements ...



@+
0
Rejoignez-nous