•initialise le port àp
•crée le socket par socket = new MulticastSocket (port)
•crée l’adresse multicast par multicastAddress = InetAddress.getByName
("am"),
•indique que le socket va servir à recevoir les paquets à destination de
cette adresse par socket.joinGroup (multicastAddress).
La classe ByteBuffer (java.nio.ByteBuffer) est utilisée pour envoyer et recevoir
des paquets. Un ByteBuffer bmanipule de manière interne un tableau d’octets
que l’on obtient par b.array(). On peut obtenir sa capacité par b.capacity(). On
peut de plus lire et écrire à une position courante (obtenue par b.position()) par
des méthodes de type get et put. Les lectures se font jusqu’à une position limite
donnée par b.limit(). La méthode getString suivante sert à lire une String de
longueur connue dans un ByteBuffer:
static String getString (ByteBuffer b, int len) {
byte[] t = new byte[len] ;
b.get (t) ;
return new String (t, 0, len) ;
}
La conversion de String vers byte[] se fait par la méthode getBytes().
3. Ecrire une méthode send() qui prend en argument un ByteBuffer et envoie
son contenu sur le socket par la méthode send de MulticastSocket. Seuls
les octets entre le début du ByteBuffer et sa position courante doivent être
envoyés.
Il faudra pour cela construire un DatagramPacket à partir du ByteBuffer,
de l’adresse am et du port pde destination. Vous pouvez utiliser le con-
structeur: DatagramPacket(byte[] buf, int length) pour affecter les don-
nées et la méthode setSocketAddress(SocketAddress address) pour affecter
l’adresse destination am, et le port p.
4. Ecrire une méthode sendUnicast() qui prend en argument une SocketAd-
dress et un ByteBuffer et envoie son contenu sur le socket par la méthode
send de MulticastSocket. Seuls les octets entre le début du ByteBuffer et
sa position courante doivent être envoyés.
Il faudra pour cela construire un DatagramPacket à partir du ByteBuffer.
Vous pouvez utiliser le constructeur: DatagramPacket(byte[] buf, int length)
pour affecter les données et la méthode setSocketAddress(SocketAddress
address) pour affecter l’adresse destination.
5. Ecrire une méthode receive() qui prend en argument un ByteBuffer, rem-
plit son contenu par celui du paquet reçu et renvoie l’adresse et le port
de l’envoyeur sous forme de SocketAddress. Utiliser pour cela la méthode
receive(DatagramPacket x) de MulticastSocket pour recevoir un paquet.
2