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);
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.
Pourquoi Multicast, donc UDP ? Pour être sûr de perdre des données ? TCP ça ne va pas pour ce que tu veux faire ?
Pour faire voyager des objets, tu les sérializes (c'est immédiat en Java si les les classes sont déclarées Serializable), tu les envoies dans le socket via un ObjectOutputStream et tu les lis de l'autres côté avec un ObjectInputStream.
Sinon, pour des besoins plus pointus, par exemple intancier une classe d'un côté du socket, la faire transister sur le réseau et exécuter son code à l'autre bout du socket, ça peut se faire en CORBA.
Si le besoin est plus simple: appeler à un bout d'un socket une méthode de classe située à l'autre bout du socket, donc sans faire voyager le code de la classe instanciée, alors RMI tout simplement.