cs_indigofox
Messages postés2Date d'inscriptionvendredi 6 août 2004StatutMembreDernière intervention22 mars 2005
-
22 mars 2005 à 01:16
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 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
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 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é ???
cs_indigofox
Messages postés2Date d'inscriptionvendredi 6 août 2004StatutMembreDernière intervention22 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?
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 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 ...