INSTITUT SUPÉRIEUR D'INFORMATIQUE
DE MAHDIA
Développement d'applications
réparties
Compte rendu
TP3
Sockets en mode non-connecté
UDP
KOUSSAY NAJAH
GLSI3-D
Rappel
Sockets UDP (User Datagram Protocol):
Définition : Un socket est un point de communication pour
envoyer et recevoir des données entre deux machines via un
réseau. Dans cette application, nous avons utilisé des sockets
UDP (User Datagram Protocol), qui est un protocole sans
connexion, signifiant qu'il ne vérifie pas la réception de
chaque paquet envoyé. Cela permet une communication rapide
mais non garantie.
DatagramSocket : La classe DatagramSocket est utilisée pour
créer des sockets UDP dans les applications client et serveur.
Chaque socket est associé à un port réseau, par exemple, 1234
pour le serveur et un port temporaire pour le client.
Paquets UDP (DatagramPacket) : Les DatagramPackets sont
des unités de données envoyées et reçues par les sockets UDP.
Ils contiennent les informations d'adresse de l'expéditeur et
du destinataire, ainsi que les données envoyées.
DatagramPacket:
Envoi de données : Le DatagramPacket est utilisé pour
envoyer des données sous forme de bytes entre le client et le
serveur. On le crée en utilisant un tableau de bytes, la
longueur du message, et l'adresse IP et le port du destinataire.
Réception de données : Lorsque le serveur ou le client reçoit
un paquet, un DatagramPacket est utilisé pour extraire les
données sous forme de tableau de bytes, que l'on peut ensuite
convertir en chaîne de caractères.
InetAddress
La classe InetAddress représente une adresse IP dans Java.
Dans cette application, InetAddress.getLocalhost() est utilisé
pour obtenir l'adresse IP locale du serveur, permettant de
tester l'application en local.
Gestion de l’E/S avec DatagramSocket
Pour envoyer des données, le client et le serveur utilisent la
méthode send() sur une instance de DatagramSocket, en
passant en paramètre un DatagramPacket.
Pour recevoir des données, la méthode receive() est utilisée.
Elle bloque l’exécution jusqu'à ce qu'un paquet soit reçu,
assurant que le programme attend la réponse avant de
continuer.
Conversion de données
Dans les applications réseau, les données sont envoyées sous
forme de bytes. Nous utilisons les méthodes getBytes() pour
convertir une chaîne en tableau de bytes, et le constructeur de
String pour convertir les bytes reçus en chaînes de caractères.
Scanner pour l'Interaction Utilisateur
La classe Scanner est utilisée pour lire l'entrée utilisateur
dans la console, permettant d’entrer un message et de
l’envoyer au serveur. Elle facilite la création d'une interface de
commande simple.
LocalTime et DateTimeFormatter
Pour formater l’heure dans l'application serveur, les classes
LocalTime et DateTimeFormatter permettent de capturer
l'heure actuelle et de l'afficher sous forme de chaîne (par
exemple, ("HH:mm:ss").
TP
EX1:
Client
Ce programme met en œuvre un client UDP qui envoie des messages à
un serveur UDP. Le client crée un socket UDP et utilise l’adresse IP
locale pour identifier la machine hôte. Dans une boucle, il demande à
l’utilisateur de saisir un message, puis envoie ce message au serveur
sous forme de paquet UDP. Si l’utilisateur saisit "Fin", la boucle s'arrête
et le client ferme le socket, marquant ainsi la fin de la communication.
Server
Ce programme implémente un serveur UDP qui reçoit des messages
d’un client. Il ouvre un socket UDP sur le port 1234 pour écouter les
messages entrants. Lors de la réception de chaque message, le serveur
affiche son contenu dans la console. La communication se poursuit
jusqu’à ce que le serveur reçoive le message "Fin", indiquant la fin de la
session. À ce moment-là, le serveur affiche un message de terminaison
et ferme le socket, mettant fin au programme. Ce serveur est conçu
pour traiter de manière continue les messages d’un client et peut être
adapté pour répondre ou traiter des messages selon les besoins.
Output
server
client
Fin
server
client
EX2:
Client
Ce programme Java crée un client UDP qui communique avec un
serveur. Le client envoie des messages texte au serveur via un socket
UDP et attend une réponse. À chaque itération, l’utilisateur saisit un
texte qui est envoyé sous forme de paquet au serveur. Le client attend
ensuite une réponse, qu’il affiche sur la console. Si l’utilisateur saisit
"exit", le client ferme la connexion et termine l'exécution.
Server
Ce programme Java implémente un serveur UDP qui reçoit des
messages texte d'un client, les convertit en majuscules et renvoie le
texte modifié. Le serveur utilise un socket UDP, qui écoute en
permanence sur le port 4321 pour recevoir les messages clients.
Lorsqu'un message est reçu, il est affiché, transformé en majuscules,
puis renvoyé au client. Le serveur fonctionne de façon continue en
boucle, prêt à traiter d'autres messages sans interruption.
Output
server
client
EX3:
Client
Le client invite l'utilisateur à entrer un message, qu'il envoie sous
forme de paquet UDP au serveur via le port 1234, puis il attend une
réponse. Dès que le serveur répond, le client affiche le message reçu.
Si l'utilisateur saisit "fin," le client stoppe la boucle d'envoi-réception
et ferme le socket pour terminer la communication.
Server
Le serveur UDP attend les messages envoyés par le client via le port
1234. Lorsqu'un message est reçu, le serveur le traite, obtient l'heure
actuelle, et envoie cette information sous forme de réponse au client.
Si le message reçu est "fin," le serveur sort de la boucle et ferme le
socket, mettant ainsi fin à la connexion avec le client.
Output
server
client
Fin
server
client