Rapport de mini-projet : Chat Room over UDP

Transcription

Rapport de mini-projet : Chat Room over UDP
Rapport de mini-projet : Chat Room over UDP
Réalisé par : Sondes Larafa & Hechmi SOLTANI
Tests effectués
I. Tests côté client :
Connexion au serveur :
On lance le client dans l’un des cas suivants : serveur non démarré, numéro de port différent
du port d’écoute du serveur ou machine serveur inexistante. Le client envoie alors sa demande
de connexion au serveur et reste bloqué car il ne reçoit aucune réponse de ce dernier. Il faut
alors intervenir manuellement (Ctrl-c) pour stopper l’exécution.
Pour remédier à ce problème, nous avons imposé au client un délai maximal d’attente
d'
établissement de la connexion au delà duquel on rompt la tentative et on avertit l’utilisateur
avec un message d'
erreur en expliquant le problème et en suggérant de vérifier certains
paramètres de la connexion.
La valeur par défaut de ce délai est de 15 secondes. Il s'
agit d'
une valeur purement théorique
adaptée au cas d’un petit sous réseau de type 157.159.xyz.255. Pour pouvoir prendre en
compte les délais éventuels de latence dans les réseaux, nous avons ajouté la possibilité de
faire passer la variable délai maximal en ligne de commande. On lance alors la commande
suivante :
java Sock_client delai_max
Gestion des paramètres de connexion entrés par l’utilisateur :
Voici notre fenêtre de connexion au serveur de chat :
2
Les valeurs entrées sont vérifiées immédiatement quand on clique sur connexion : un pseudo
vide provoque un message d’erreur et une re-proposition de la fenêtre. Une machine serveur
inexistante provoque également un message d’erreur. Pour le numéro de port, nous vérifions
qu’il est bien un entier et qu’il est compris entre 1024 et 65536.
Gestion de la déconnexion brusque du client :
Au cas où un utilisateur ferme sa fenêtre de chat sans se déconnecter, le client demeure
connecté pour le serveur. Pour résoudre ce problème, nous avons rajouté une classe qui gère
l’évènement de fermeture de la fenêtre. Dans cette classe, le client envoie un message au
serveur pour l’avertir de sa déconnexion et se déconnecte.
Gestion des messages du client :
Quand le client n’est pas connecté, le client ne peut pas entreprendre d’envoi de messages
vers le serveur. Nous avons alors désactivé la zone de texte destinée à recevoir les messages
de l’utilisateur quand la connexion n’est pas établie.
Temps nécessaire pour se connecter au serveur :
Nous nous sommes proposés d’effectuer des tests sur le temps nécessaire à l’établissement de
la connexion d’un client. Pour cela nous avons utilisé le fichier de test :
TempsDemandeConnexion.java.
On lance le serveur tout d’abord, puis on lance la commande suivante :
java TempsDemandeConnexion <serveur> <port>
Ce programme fournit alors une mesure du temps qui s’est écoulé entre l’envoi de la demande
de connexion et la réception de la confirmation du serveur.
Résultats de ces tests :
Le fichier des tests obtenu est « testTempsConnexion.txt » pour une boucle de 50 demandes de
connexions.
Le tableau suivant illustre des résultats obtenus pour différents nombres de demandes :
3
Nombre de demandes
Temps (millisecondes)
50
7
100
4
1000
2
Temps nécessaire pour recevoir la liste des connectés :
Pour lancer ce test, on utilise le fichier « TempsDemandeReceptionChatList.java ». La
commande à exécuter est de cette forme :
java TempsDemandeReceptionChatList <serveur> <portServeur>
Le fichier « testTempsDemandeChatList.txt » contient les résultats correspondant à une
boucle de 50 demandes de liste de connectés. Dans ce cas, la moyenne est de 8 millisecondes.
II. Tests côté serveur :
Nombre maximal de requêtes « presque » simultanées que le serveur peut traiter :
Pour lancer ce type de test, on utilise le fichier « Bombarder_serveur.java ». La commande à
exécuter est de cette forme :
java Bombarder_serveur <serveur> <portServeur> <nombre_de_requetes>
Nous avons effectués plusieurs bombardements du serveur en modifiant à chaque fois le
nombre de requêtes envoyés vers le serveur, nous avons pu dressé le tableau suivant :
Nombre de requêtes
Nombre de requêtes
enregistrées par le
serveur
250
500
600
700
1000
10000
250
500
497
502
439
500
Nous constatons que le serveur accepte un maximum de 500 clients. Il y a donc des requêtes
qui se sont perdus en route. Cette perte est due au protocole UDP qu’on utilise qui n’est pas
aussi fiable que TCP.
Nous avons effectué une autre expérience qui consiste à bombarder le serveur par un millier
de requêtes et envoyer à partir d’un autre client une requête. Cette requête est alors rejetée et
une exception est levée.
L’explication de ce rejet est que notre serveur est un serveur mono tâche qui ne peut pas
exécuter simultanément plusieurs instructions. Pour remédier à ce problème, il faut faire un
serveur multi-tâches (multi-threads). Dans ce cas, chaque client sera pris en charge par un
thread du serveur et le problème des requêtes simultanées ne se posera plus.
4

Documents pareils