On se propose de réaliser un "chat" avec les sockets en C. Au cours de ce projet nous réaliserons plusieurs versions de ce "chat". La dernière version aura pour but de limiter la charge (c'est à dire le travail à faire) des différentes machines.
La première version comporte un serveur qui reçoit chaque message et le fait suivre aux autres clients.
On obtient donc une architecture en étoile avec le serveur au centre de l'étoile.
Note : A vous de choisir si vous voulez travailler avec TCP ou UDP.
Dans cette seconde version, le serveur sert juste d'annuaire et permet à tout nouveau client de dialoguer directement avec les autres clients.
Par la suite, chaque client envoie les messages directement aux autres clients.
On obtient donc une architecture totalement connectée.
Notes :
Le rôle du serveur sera de communiquer la liste des couples (adresse IP, numéro de port) des clients déjà présents à tout nouveau client.
Le nouveau client devra ensuite dialoguer avec les anciens clients.
Cette étape est plus facile à réaliser avec UDP.
Dans cette dernière version, on veut optimiser le maillage entre les clients (appelé les Peers ou Pairs en Français). Chaque Peer sera mis en relation avec un nombre restreint d'autres Peers et fera suivre en plus de ses propres messages, les messages envoyés par un autre Peer vers un sous-ensemble de Peers connus.
Ainsi tout message envoyé par un client sera reçu par tout autre client après avoir traversé 0 ou plusieurs clients.
Notes :
Il faut éviter dans cette version qu'un message ne boucle indéfiniment sur un ensemble de clients.
Le rôle du serveur, dans cette version est de mettre en place un maillage optimal de façon incrémentale. C'est à dire que lors de chaque ajout de client, il devra s'assurer que tous les clients sont mis en relation avec au moins un autre client et qu'aucun client n'est surchargé (c'est à dire mis en relation avec un ensemble très important de clients). On pourra par exemple mettre en relation le nouveau client avec le client existant qui connais le plus faible nombre d'autres clients.
En plus de ce qui est demandé vous pouvez :