Un JavaPhone de base
Cet exercice est la suite de l'exercice de l'exercice de l'IHM.
Faîtes d'abord celui-ci avant d'attaquer ce nouvel exercice.
Le but de cet exercice est de développer un JavaPhone de base, c'est-à-dire un XPhone version Java.
Le programme sera en fait divisé en deux :
- Un premier programme Envoyer pour envoyer des messages.
- Un deuxième programme Recevoir qui va utiliser la classe IHMAffichage.
Envoyer
- Dans le fichier Envoyer.java, importez les paquetages java.io
et java.net et créez une classe Envoyer.
- Ajoutez la constantes PORT de valeur 6010 par exemple (utilisez static final
pour définir une constante)
- Créez une méthode main avec la déclaration suivante :
public static void main (String args[]) throws Exception
(throws Exception est utilisé pour les exceptions qui seront expliquées dans un prochain cours)
et mettez tous le code suivant dans cette méthode.
- Dans la méthode main, testez si la longueur du tableau args est
différente de 2 et si c'est le cas, affichez le
message "Usage: java Envoyer " et terminez le programme.
- Pour envoyer le message passé en paramètre de la ligne de commande, il faut tout
d'abord récupérer l'adresse internet de la machine destinataire dont le nom
se trouve en args[0].
Récupérez l'adresse avec InetAddress.getByName(args[0]) et affectez la à
un objet de nom adress et de type InetAddress.
- Ensuite, il faut transformer le message à envoyer se trouvant en args[1] en
un tableau d'octets pour pouvoir l'envoyer. Pour cela, utilisez les commandes suivantes :
// Convertit le tableau en un tableau d'octets
int msglen = args[1].length();
byte[] message = new byte[msglen];
args[1].getBytes(0, msglen, message, 0);
- Puis, on initialise un "paquet" avec les donnees et l'adresse avec la commande :
DatagramPacket packet = new DatagramPacket(message, msglen, adress, PORT);
- Enfin, on crée un socket avec :
DatagramSocket socket = new DatagramSocket();
et on envoie le packet :
socket.send(packet);
- Compilez votre programme.
Recevoir
- Dans le fichier Recevoir.java, importez les paquetages java.io et java.net
- Importez aussi le paquetage votre_login.awt où vous avez mis
les fichiers Affichable.class et IHMAffichage.class.
Attention, vérifiez que vous avez écrit votre interface Affichable
et votre classe IHMAffichage dans deux fichiers séparés et
qu'elles sont toutes les deux déclarés publiques.
- Créez une classe Recevoir qui implémente l'interface Affichable
- Ajoutez la constantes PORT de valeur 6010 par exemple.
- Ajoutez une donnée String de nom dernierMessage
- Implémentez les méthodes quitter et get de l'interface Affichable.
La méthode get doit renvoyer la valeur de dernierMessage
- Créez une méthode main avec la déclaration suivante :
public static void main (String args[]) throws Exception
(throws Exception est utilisé pour les exceptions qui seront expliquées dans un prochain cours)
et mettez tous le code suivant dans cette méthode.
- Dans la méthode main, créez un objet Recevoir et un objet IHMAffichage.
- Créez un tableau de byte de nom buffer et de taille 1024 pour stoquer les bytes recus
- Créez un socket pour surveiller les communications sur le port avec :
DatagramSocket socket = new DatagramSocket(PORT);
- Dans une boucle infinie :
- Créez un paquet avec un tampon vide pour recevoir les données avec :
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
- Attendez la reception d'un datagramme avec :
socket.receive(packet);
- Convertissez le contenu du datagramme reçu en chaine de caracteres et affectez-la à dernierMessage avec :
dernierMessage = new String(buffer, 0, 0, packet.getLength());
- Compilez votre programme.
Pour executer vos programmes :