Envoi d'un objet par sockets multicast

Yakurena Messages postés 47 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 1 juillet 2007 - 1 juil. 2007 à 21:02
lyc1 Messages postés 1 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 4 juillet 2007 - 4 juil. 2007 à 12:06
Bonjour,


Je developpe actuellement une application dans laquelle j'utilise la communication réseau par sockets, avec le principe du multicast. Je pense avoir compris ce principe, et j'arrive à l'utiliser pour envoyer un message (chaine de caractères), avec le code suivant :




 


String msg = "Hello";


InetAddress group = InetAddress.getByName("228.5.6.7");


MulticastSocket s = new MulticastSocket(6789);


s.joinGroup(group);


DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),


group, 6789);


s.send(hi);


Le problème qui se pose ici est que j'aurais besoin d'envoyer par la socket non pas une chaîne de caractères, mais un objet Java. Or je n'ai trouvé aucune méthode ou constructeur permettant d'encapsuler un objet dans le DatagramSocket (tous les constructeurs ne supportent apparemment qu'un tableau d'octets). J'ai vu que cela est possible par des simples sockets client-serveur, par un code ressemblant à :


Socket serveur = new Socket(adresse, port);


OutputStream sortie = serveur.getOutputStream();


ObjectOutputStream oos = new ObjectOutputStream(sortie);


oos.writeObject(objet);


oos.flush();


Mais je n'y ai pas trouvé d'équivalent dans le cas des sockets multicast. Quelqu'un connaîtrait-il une possibilité pour faire véhiculer des objets par des sockets multicast ?


Merci d'avance pour votre aide.

1 réponse

lyc1 Messages postés 1 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 4 juillet 2007
4 juil. 2007 à 12:06
Salut
Sérialise ton objet dans un ByteArrayOutputStream

ByteArrayOutputStream buf = serveur.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(buf);
oos.writeObject(objet);
oos.flush();
oos.close();

DatagramPacket hi = new DatagramPacket(buf.toByteArray(), buf.size(), group, 6789);
...

Même chose dans l'autre sens, avec un ByteArrayInputStream

Damien
0
Rejoignez-nous