Programmation réseau avec Java - TD 2

Manipulation de bits et d'adresses IP
Le protocole UDP - Datagrammes et sockets UDP en Java


Exercice 1 - Manipulation de bits avec Java

Deux caractéristiques du langage Java sont cruciales dans la programmation réseau et les manipulations d'adresses:

Écrire le code Java permettant d'effectuer deux décalages à droite sur un octet donné de type byte, vu comme huit bits. Par exemple, on veut que decal2Droite(32) donne 8, ce qui semble normal vu la représentation bit à bit de ces deux octets (00100000 et 00001000), mais on veut en revanche que decal2Droite(-124) donne 33, puisque les représentations bit à bit de ces deux valeurs sont 10000100 et 00100001).

Exercice 2 - Adresses IP en Java

Écrire un programme Java qui permet d'afficher les noms et adresses IP des machines suivantes:

Une machine (par exemple, un routeur) peut avoir plusieurs adresses IP. Comment connaître, par exemple, toutes les adresses de stamand2.renater.ft.net?

Exercice 3 - Manipulation des adresses IP

Écrire un programme Java qui permet d'afficher sur 4 lignes successives la valeur des 4 octets constituant l'adresse IP d'un nom de machine donné.

Écrire une classe de méthodes de manipulation d'adresses IP permettant de:

  1. Déterminer et retourner, sous la forme d'une String la classe d'une adresse IP acceptée en entrée:
    String getClassName(InetAddress address)
  2. Déterminer et retourner l'adresse IP correspondant à un tableau de byte et à l'indice du premier octet de l'adresse dans ce tableau:
    InetAddress byteToInetAddress(byte[] address, int offset)
  3. Déterminer et retourner, sous la forme d'une adresse IP, le masque d'une adresse IP fournie sous la forme d'un tableau de byte et de l'indice du premier octet de l'adresse dans ce tableau (on ne tiendra compte ici que des classes A, B et C):
    InetAddress getMask(byte[] address, int offset)
  4. Déterminer et retourner, sous la forme d'une adresse IP, l'adresse de broadcast associée à la classe d'une adresse acceptée en entrée:
    InetAddress getBroadcast(byte[] address, int offset)
  5. Déterminer et retourner l'adresse IP de broadcast local:
    InetAddress getLocalBroadcast()

Exercice 4 - Quelle heure est-il?

Écrire un client UDP permettant d'interroger le démon DayTime (RFC 867) qui est accessible sur le port 13 d'une machine host. On attend un fonctionnement du type:

$ java DayTimeUDPClient gaspard
Création de la socket locale attachée :
         à l'adresse 0.0.0.0/0.0.0.0
         au port 1030
Émission du datagramme
Attente de la réponse...
Réponse reçue de (gaspard.univ-mlv.fr:13): Tue Dec  5 16:44:04 2000
 
$

Exercice 5 - Echo et limitations d'UDP

Faire la même chose que l'exercice précédent avec le protocole Echo (RFC 862). Écrire un client qui envoie des messages au démon Echo accessible sur le port 7 d'une machine host, et qui reçoit en retour ce même message. Par exemple:

$ java EchoUDPClient gaspard "Mon beau message, roi des machines"
Socket locale attachée :
         à l'adresse 0.0.0.0/0.0.0.0
         au port 1044
34 octets émis vers gaspard/193.55.63.81
Capacité de la zone de stockage : 44
34 octets reçus
contenant  Mon beau message, roi des machines
provenant de gaspard.univ-mlv.fr/193.55.63.81:7
$

Tester ce client avec des messages de taille différentes afin de déterminer la taille maximale des données transportables dans un datagramme UDP. Qu'est ce qui impose cette limite?

Exercice 6 - Client/serveur UDP

Écrire un client et un serveur communiquant en UDP de sorte que le client envoie un texte au serveur qui le met en majuscule et le lui retourne.


Nicolas.Bedon[at]univ-mlv.fr - Etienne.Duris[at]univ-mlv.fr - © Université de Marne-La-Vallée - Décembre 2000