Skip to content

ruanadia/paroles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projet Paroles

Application Client/Serveur de messagerie instantanée reposant sur un protocole applicatif binaire et une architecture réseau IPv6 sous Linux, développée en C dans le cadre de la troisième année de Licence Informatique.

Ce projet met en œuvre des concepts de programmation système et réseau pour permettre la gestion d'utilisateurs, la création de groupes de discussion, l'échange de billets et de réponses, ainsi que la diffusion de notifications en temps réel.

🚀 Fonctionnalités Techniques

  • Architecture Réseau IPv6 et Sockets POSIX : L'ensemble des communications réseau s'appuie sur des sockets IPv6 (AF_INET6), assurant une compatibilité native avec la pile réseau moderne.
  • Protocoles Mixtes (TCP / UDP Multicast) :
    • TCP (SOCK_STREAM) : Utilisé pour l'ensemble des requêtes interactives nécessitant de la fiabilité comme l'inscription, la création de groupe, la publication de billets, les réponses, la récupération de l'historique, les requêtes d'invitations et la liste des membres.
    • UDP Multicast (SOCK_DGRAM) : Utilisé via l'abonnement aux groupes de multi-diffusion (IPV6_JOIN_GROUP) pour diffuser instantanément les notifications d'activité au sein d'un groupe comme un nouveau billet posté, l'arrivée d'un membre, le départ d'un membre ou la fermeture du groupe.
    • UDP Unicast : Utilisé pour l'envoi direct de notifications spécifiques à un utilisateur connecté pour la réception d'une invitation ou la notification de consultation de billet.
  • Multithreading et Concurrence : Le serveur gère plusieurs connexions clients simultanées de manière asynchrone en attribuant chaque nouveau client accepté à un thread dédié (pthreads).
  • Synchronisation et Sécurité Mémoire : L'accès aux structures de données partagées en mémoire centrale par le serveur (table des utilisateurs et état des groupes) est sécurisé par un verrou d'exclusion mutuelle (pthread_mutex_t) pour éviter les situations de concurrence.
  • Protocole Applicatif Binaire : Conception et manipulation bas niveau des paquets de données à l'aide de masques binaires et de décalages de bits (bit-shifting) pour optimiser l'encapsulation. La gestion du boutisme (network byte order) est assurée via les fonctions htons et ntohs.

🛠️ Architecture du Code

Le projet est structuré autour des composants suivants :

  • serveur.c : Contient la boucle principale d'écoute TCP, l'instanciation des threads pour chaque client connecté et la gestion des notifications.
  • client.c : Contient l'interface utilisateur en ligne de commande, l'envoi des requêtes applicatives et la gestion de deux threads d'écoute secondaires pour intercepter les notifications UDP en arrière-plan.
  • protocole.c / protocole.h : Contient les fonctions d'encapsulation, de sérialisation et de désérialisation des structures de données en paquets d'octets ainsi que les routines de lecture et écriture sécurisées recv_securise et send_securise.
  • Groupe.c / Groupe.h et historique.c / historique.h : Gèrent respectivement les structures de données internes des canaux de discussion et la persistance temporaire des messages en mémoire.

💻 Guide des Commandes du Client

Une fois l'inscription et la création ou l'adhésion à un groupe complétées au lancement de l'exécutable, les commandes suivantes peuvent être saisies dans l'invite de commande (>) :

  • /post <id_groupe> <message> : Publie un nouveau billet dans le groupe spécifié.
  • /rep <id_groupe> <num_billet> <texte> : Répond à un billet existant au sein d'un groupe.
  • /hist <id_groupe> [num_billet] [num_reponse] : Demande au serveur la liste et le contenu des messages ou réponses associés à un groupe.
  • /invit : Sans argument, consulte la liste de toutes les invitations en attente reçues pour rejoindre des groupes.
  • /invit <id_groupe> <id_user1> <id_user2> ... : Permet à l'administrateur d'un groupe d'inviter un ou plusieurs utilisateurs via leurs identifiants numériques.
  • /membres <id_groupe> : Affiche la liste complète des membres appartenant au groupe indiqué.
  • /repinvitation <id_groupe> <action> : Répond à une invitation reçue. L'argument <action> prend la valeur 1 pour accepter, 0 pour refuser, ou 2 pour quitter le groupe.
  • /quit : Déconnecte proprement le client et ferme l'application.

🔨 Compilation et Exécution

Le projet intègre un Makefile pour automatiser la génération des fichiers exécutables.

Instructions

  1. Compiler l'intégralité du projet :
    make
  2. Lancer le serveur
    ./serveur
  3. Lancer le client
    ./client

About

application client/serveur de messagerie IPv6 en C. protocole binaire sur mesure (TCP / UDP Multicast) et gestion de la concurrence via threads (pthreads)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors