Cyril Rabat


TP n°7 : les sockets en mode non connecté

Le but de ce TP est de manipuler les sockets en mode non connecté en Java. Nous allons réaliser différentes applications distribuées qui pourront être exécutées localement ou testées sur plusieurs postes.

 

Avant de commencer le TP, n'oubliez pas de tester les différents programmes d'exemple concernant les sockets en mode UDP :  Sockets en Java.

Fichiers de configuration en JSON

 

Le résultat de cet exercice sera utilisé dans tous vos futurs programmes Java jusqu'au projet. Il s'agit d'un exercice préliminaire et doit être traité rapidement.

Dans les prochaines applications à développer, il est nécessaire de spécifier les adresses IP et les numéros de port des clients et/ou du serveur (selon l'application). Pour éviter de spécifier ces données directement dans le code ou en arguments, nous souhaitons développer une classe Config pour gérer les fichiers de configuration au format JSON. Ainsi, pour configurer un client qui se connecte à un serveur, nous pourrions utiliser le fichier suivant :

{
    "adresse" : "127.0.0.1",
    "port" : 1056
}

Dans chaque programme (classe Java contenant un main), nous pouvons ajouter les éléments suivants :

  • Une fonction creerFichierConfiguation qui crée un fichier de configuration avec des valeurs par défaut ; le nom du fichier est passé en paramètre. Elle retourne l'objet Config créé.
  • Dans le main :
    • Si aucun argument n'est spécifié, soit le fichier existe et on l'ouvre, soit on le crée avec la méthode creerFichierConfiguation.
    • Si un argument est spécifié, soit le fichier existe et on l'ouvre, soit on le crée avec la méthode creerFichierConfiguation.
  • Dans tous les cas, un objet Config est créé et il peut être consulté pour chaque valeur nécessaire.

Questions

  1. Complétez la classe Config suivante :  Config.java.
  2. Testez votre classe Config à l'aide de la classe suivante :  Exemple.java.

Prise en main d'UDP

Nous souhaitons écrire une application distribuée constituée de deux applications. La première, nommée serveur, écoute sur un numéro de port donné (spécifié dans le fichier de configuration) et se met en attente de réception de messages (une chaîne de caractères, dans un premier temps). Dès qu'un message est reçu, il est affiché à l'écran. La deuxième application, nommée client, envoie un message au serveur, le message étant lu au clavier. L'adresse IP et le numéro de port du serveur sont spécifiés dans son fichier de configuration.

Questions

  1. Écrivez les applications et vérifiez leur fonctionnement.
  2. Cette application distribuée fonctionne-t-elle sur le modèle de communication client/serveur ?
  3. Que se passe-t-il si le serveur n'est pas démarré et qu'un client envoie un message ?
  4. Cette fois-ci, nous souhaitons envoyer un message au format JSON. Modifiez vos applications.
  5. Le serveur retourne maintenant un accusé de réception au client (toujours au format JSON). Si le message est trop petit (plus petit que 5 caractères) ou trop grand (plus grand que 20 caractères), un code et un message d'erreur sont envoyés. Sinon, un code et un message d'accusé de réception sont envoyés.
  6. Quelle est la différence entre un envoi d'une chaîne de caractères correspondant à un document JSON et un envoi d'un objet JSONObject sérialisé ? À votre avis, quel est le meilleur choix ?

La mienne m'attend au port, au bout de la jetée...

Nous souhaitons développer une application permettant de gérer un port pour le stationnement des bateaux. Un port propose la location de places de parking, chacune identifiée par une longueur (le prix dépend de la longueur de la place). Le port propose aussi une prestation de gardiennage. L'application permet à un client de récupérer les informations sur les emplacements libres, le prix des places. Il est possible également de vérifier si un bateau est présent sur un des emplacements du port, de récupérer les informations d'un bateau situé à un emplacement particulier ou d'ajouter/retirer un bateau d'un emplacement.

L'application se met en attente des requêtes en UDP sur un numéro de port spécifié dans un fichier de configuration. Toutes les données sont stockées dans des fichiers JSON (autres que le fichier de configuration !).

Questions

  1. Proposez une modélisation complète de l'application (diagramme de classes, architecture de fichiers JSON, diagrammes d'échange).
  2. Ecrivez l'application.

Outils


Version de cette page Dimanche 4 Novembre 2018

© Cyril Rabat 2018

Connexion

Mot de passe perdu

Dernières nouvelles

16/11/2018 Les inscriptions pédagogiques pour le second semestre auront lieu à partir de la semaine prochaine. Vous serez prochainement contacté(e) par vos tuteurs.
16/11/2018 Du tutorat de consolidation pour MA0102 est prévu dans la semaine du 10/12. Les étudiants intéressés doivent contacter le responsable de la formation.
09/11/2018 Le planning des examens (EET) est disponible sur la page dédiée. Pour rappel : pas d'EET en L1 et semaine d'examens pour les L2 et L3 en semaine 51 (calendrier anticipé).
01/10/2018 Les emplois du temps sont maintenant accessibles depuis la page de la scolarité.

Contact

Courriel :
cyril.rabat [at] univ-reims.fr

Téléphone :
+33-326-91-33-81

Fax :
+33-326-91-33-97

Facebook :
lien Facebook direct