Partie 3 : Programmation réseau «avancée» en C#



Documents pareils
Synchro et Threads Java TM

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Préparation LPI. Exam Securité. Document sous licence Creative commons «by nc sa» nc sa/2.

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Service FTP. Stéphane Gill. Introduction 2

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Un ordonnanceur stupide

Le service FTP. M.BOUABID, Page 1 sur 5

Introduction : les processus. Introduction : les threads. Plan

Serveurs de noms Protocoles HTTP et FTP

DUT Informatique Module Système S4 C Département Informatique 2009 / Travaux Pratiques n o 5 : Sockets Stream

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Les Threads. Sommaire. 1 Les Threads

Threads. Threads. USTL routier 1

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

TP4 : Firewall IPTABLES

Cours Programmation Système

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Configurer le Serveur avec une adresse IP Statique (INTERFACE :FastEthernet) : et un masque

Java DataBaseConnectivity

Projet de programmation (IK3) : TP n 1 Correction

Administration Linux - FTP

Une introduction à la technologie EJB (2/3)

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

INITIATION AU LANGAGE JAVA

La qualité de service (QoS)

Figure 1a. Réseau intranet avec pare feu et NAT.

Réaliser un accès distant sur un enregistreur DVR

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

Exécutif temps réel Pierre-Yves Duval (cppm)

Serveur d impression CUPS

GOUTEYRON ALEXIS. SIO2 N candidat: UEpreuve E4. USituation professionnelle 2. serveurs de fichiers. Uen haute disponibilité

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server

Pour configurer le Hitachi Tecom AH4021 afin d'ouvrir les ports pour "chatserv.exe", vous devez suivre la proc

Environnements informatiques

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Cours de Systèmes d Exploitation

Introduction aux Systèmes et aux Réseaux

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

RMI le langage Java XII-1 JMF

Processus, threads et gestion de la synchronisation

Vanilla : Virtual Box

Notion de thread (1/2)

Intérêt du NAT (Network Address Translation) Administration Réseau Niveau routage. Exemple d Intranet. Principe NAT

Premiers Pas en Programmation Objet : les Classes et les Objets

TP LINUX : MISE EN RÉSEAU D UN SERVEUR LINUX

Sécurité des réseaux Firewalls

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Cloud public d Ikoula Documentation de prise en main 2.0

Compte Rendu d intégration d application

TP 1 : LES COMMANDES RESEAUX Matière: RESEAUX LOCAUX

Administration UNIX. Le réseau

Université Pierre Mendès France U.F.R. Sciences de l Homme et de la Société Master IC²A. TP réseau firewall

Administration Centrale : Opérations

BIND : installer un serveur DNS

Cours CCNA 1. Exercices

Les différentes méthodes pour se connecter

acpro SEN TR firewall IPTABLES

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Capture, Filtrage et Analyse de trames ETHERNET avec le logiciel Wireshark. Etape 1 : Lancement des machines virtuelles VMWARE et de Wireshark

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Installation FollowMe Q server

Installation de la plate-forme Liberacces 2.0 «Intégrale» avec LiberInstall

Serveur FTP. 20 décembre. Windows Server 2008R2

Le protocole FTP (File Transfert Protocol,

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Table des matières Hakim Benameurlaine 1

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

L3 informatique TP n o 2 : Les applications réseau

Domain Name Service (DNS)

Sommaire Introduction... 3 Le but du projet... 3 Les moyens utilisés... 3 Informations sur le client FTP... 4 Pourquoi une version Linux et

Netfilter & Iptables. Théorie Firewall. Autoriser le trafic entrant d'une connexion déjà établie. Permettre le trafic entrant sur un port spécifique

Plateforme PAYZEN. Définition de Web-services

NON URGENTE TEMPORAIRE DEFINITIVE. OBJET : FONCTIONNEMENT OmniVista 4760 SUR UN RÉSEAU VPN / NAT

VoIP et "NAT" VoIP et "NAT" 1/ La Traduction d'adresse réseau. 1/ La traduction d'adresse réseau. 1/ La traduction d'adresse réseau

Table des matières Hakim Benameurlaine 1

Installation et configuration de SQL Server 2008 R2 (v3)

Procédure d installation de la solution Central WiFI Manager CWM

Administration Réseau sous Ubuntu SERVER Serveur DHCP

Projet gestion d'objets dupliqués

DOCKER MEETUP. Christophe Labouisse

EPREUVE PRATIQUE DES TECHNIQUES INFORMATIQUES ACTIVITE N 1. Thème de l activité : Configuration d un firewall

Java et les bases de données

TP n 2 : Installation et administration du serveur ProFTP. Partie 1 : Fonctionnement du protocole FTP (pas plus de 15min)

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

IP & Co. 1. Service DHCP. L'objectif de ce TP est de voir l'ensemble des services élémentaires mis en oeuvre dans les réseaux IP.

Tunnels et VPN. 22/01/2009 Formation Permanente Paris6 86

1. Fonctionnement de l Internet 2. Protocoles applicatifs 3. Programmation réseau

NAS 224 Accès distant - Configuration manuelle

avast! EP: Installer avast! Small Office Administration

Contrôleur de communications réseau. Guide de configuration rapide DN

Plan. École Supérieure d Économie Électronique. Plan. Chap 9: Composants et systèmes de sécurité. Rhouma Rhouma. 21 Juillet 2014

Transcription:

Partie 3 : Programmation réseau «avancée» en C#

Plan du cours La socket vue comme un flux Les threads Serveur Multi threadé Serveur «pré threadé» Classes facilitant la programmation réseau TCP /IP en C# Démon xinetd Serveur stateless Le projet réseau

La socket vue comme un flux On souhaite manipuler des flux binaires (BinaryWriter ou BinaryReader) afin de pouvoir envoyer autre chose que des tableaux de bytes. Les deux constructeurs prennent en paramètre des objets de la classe Stream. Les FileStream qui permettent de manipuler les fichier binaires sont dérivées de la classe Stream. Les deux constructeurs de ces classe sont : public BinaryWriter ( Stream output ) public BinaryReader ( Stream input ) On va utiliser la classe NetworkStream pour transformer la socket en flux (stream). Cette classe dérive de la classe Stream.

La socket vue comme un flux Les constructeurs usuels de la classe NetworkStream sont : public NetworkStream ( Socket socket ) public NetworkStream ( Socket socket, FileAccess access ) Comme pour les fichiers, FileAccess peut avoir les valeurs suivantes : Read : Accès en lecture à la socket. Les données peuvent être lues à partir de cette socket. Write : Accès en écriture à la socket. Les données peuvent être écrites dans cette socket. ReadWrite : Accès en lecture et en écriture à la socket. Les données peuvent être écrites dans la socket et lues à partir de celle ci. Comme pour les fichiers, on peut utiliser la classe NetworkStream pour lire et écrire sur la socket, cependant nous n allons pas le faire!

La socket vue comme un flux On veut envoyer depuis le serveur un objet de type CPersonne sur une socket et le reconstituer dans le client. La sérialisation ne marche pas telle qu elle a été proposée précédemment. Il faudrait utiliser le protocole SOAP et avoir des notions en XML pour obtenir un résultat similaire. On va être obligé : 1. Dans le serveur, de décomposer chaque donnée membre de l objet CPersonne et de l envoyer sur la socket 2. Dans le client, de recevoir chaque donnée membre séparément, puis de reconstruire l objet CPersonne.

La socket vue comme un flux Code du serveur //on a accès à la socket du client (SocClient) NetworkStream NS = new NetworkStream(SocClient /*,FileAccess.Write */); BinaryWriter BW = new BinaryWriter(NS); CPersonne P = new CPersonne("Casali", "alain", 30); BW.Write((string)P._nom); BW.Write((string)P.prenom); BW.Write((int)P._age); BW.Close(); NS.Close(); SocClient.Close(); Si le serveur a besoin de lire des données sur la socket, on peut créer un objet de type BinaryReader.

La socket vue comme un flux Code du client //le client s est déjà connecté au serveur sur la socket soc NetworkStream NS = new NetworkStream(Soc /*,FileAccess.Read */); BinaryReader BR = new BinaryReader(NS); string nom = BR.ReadString(); string prenom = BR.ReadString(); int age = BR.ReadInt32(); CPersonne P = new CPersonne(nom, prenom, age); Console.WriteLine(P); // Casali, alain, 30 BR.Close(); NS.Close(); Soc.Close(); Si le client a besoin d écrire des données sur la socket, on peut créer un objet de type BinaryWriter.

Plan du cours La socket vue comme un flux Les threads Serveur Multi threadé Serveur «pré threadé» Classes facilitant la programmation réseau TCP /IP en C# Démon xinetd Serveur stateless Le projet réseau

Les threads En bon français : processus léger aussi appelé fil d'exécution Du point de vue de l'utilisateur, ces exécutions semblent se dérouler en parallèle. Chaque processus possède sa propre mémoire virtuelle Les processus légers appartenant au même processus père se partagent sa mémoire virtuelle. Tous les processus légers possèdent leur propre pile système. Principales utilisations : 1. lancer un calcul tout en ayant la main dans le programme 2. Interface graphique

Les threads Pour utiliser la classe Thread, il faut inclure l espace de nom System.Threading. Constructeur (C#1.1) : public Thread ( ThreadStart Nom ) Nom : Délégué ThreadStart (pointeur de fonction vers une fonction static void Nom()) qui représente la méthode à appeler au début de l'exécution de ce thread.

Les threads Propriétés de la classe Thread : public static Thread CurrentThread { get; } Obtient le thread en cours d'exécution. public bool IsAlive { get; } Obtient une valeur indiquant l'état de l'exécution du thread en cours. public bool IsBackground { get; set; } Obtient ou définit une valeur indiquant si le thread est ou non un thread d'arrière plan. public string Name { get; set; } Obtient ou définit le nom du thread.

Les threads Méthodes de la classe thread public void Start () lance l'exécution d'un thread public void Abort () arrête définitivement l'exécution d'un thread public static void Sleep ( int millisecondstimeout ) Suspend le thread en cours pendant une durée spécifiée. public void Join () Bloque le thread d'appel jusqu'à ce qu'un thread s'arrête

Les threads public static void affiche() { Console.Out.WriteLine("Début d'exécution de la méthode affiche dans le Thread " + Thread.CurrentThread.Name); Thread.Sleep(1000); Console.Out.WriteLine("Fin d'exécution de la méthode affiche dans le Thread " + Thread.CurrentThread.Name); } public static void Main() { Thread T1 = new Thread(new ThreadStart (affiche)); Thread T2 = new Thread(new ThreadStart(affiche)); T1.Start(); T2.Name = "2eme"; T2.Start(); Console.Out.WriteLine("On attend la fin des 2 thread"); T1.Join(); T2.Join(); Console.Out.WriteLine("Pgm fini"); }

Les threads De quoi est on sûr par rapport au programme précédent? 1. On n a pas fixé de nom au 1 thread, il est donc vide. 2. Pour chaque thread, la 1 instruction sera affichée avant la 2. 3. Le dernier affichage écran est "Pgm fini" Par contre, on ne peut pas deviner l ordre d exécution des threads (qui aura la main sur le processeur, quand et pendant combien de temps).

Les threads Comment le thread peut il accéder à des variables de la fonction Main()? En créant une donnée membre de la classe courante. public static int i ; public static void Main() { i = 1; Thread T1 = new Thread(new ThreadStart (affiche)); Thread T2 = new Thread(new ThreadStart(affiche)); T1.Start(); ++i; T2.Start(); Console.Out.WriteLine("On attend la fin des 2 thread"); Console.Out.WriteLine("Pgm fini"); }

Les threads public static void affiche() { Console.Out.WriteLine("Début du " + i + "eme thread"); Thread.Sleep(1000); Console.Out.WriteLine("Fin du " + i + "eme thread"); } Attention au résultat obtenu : le 1 thread peut prendre la main au niveau du processeur alors que la variable i vaut déjà 2 Cependant, cette solution est valable si on ne modifie pas la valeur de la donnée membre ni dans le thread, ni dans le programme lançant le thread (ici Main()).

Les threads Autre solution : utiliser les threads paramétrés (C# 2.0). Constructeur : public Thread ( ParameterizedThreadStart Nom ) Nom : Délégué ParameterizedThreadStart (pointeur de fonction vers une fonction static void Nom(Object o)) qui représente la méthode à appeler au début de l'exécution de ce thread. Cette fois ci, le délégué prend comme unique paramètre un objet (et rien d autre). La méthode Start() change de profil en conséquence : public void Start ( Object parameter )

Les threads L exemple précédant revisité : public static void affiche(object o) { Console.Out.WriteLine("Début du " + o + "eme thread"); Thread.Sleep(1000); Console.Out.WriteLine("Fin du " + o + "eme thread"); } public static void Main() { int i = 1; Thread T1 = new Thread(new ParameterizedThreadStart (affiche)); T1.Start(i); Thread T2 = new Thread(new ParameterizedThreadStart(affiche)); T2.Start(++i); Console.Out.WriteLine("Pgm fini"); }

Les threads Pour les sections critiques, il faut utiliser un objet de la classe Mutex Constructeur : public Mutex () Espace de nom : System.Threading public void ReleaseMutex () : Libère une fois Mutex. (similaire à V) public virtual bool WaitOne () : bloque le thread en cours (similaire à P) NB : cette fonction est déjà surchargée pour la classe Mutex.

Les threads Avec l exemple précédent, on veut que l affichage se fasse «d un seul bloc» public static Mutex Mu ; public static void Main() { Mu = new Mutex(); } public static void affiche(object o) { Mu.WaitOne(); Console.Out.WriteLine("Début du " + o + "eme thread"); Console.Out.WriteLine("Fin du " + o + "eme thread"); Mu.ReleaseMutex(); }

Plan du cours La socket vue comme un flux Les threads Serveur Multi threadé Serveur «pré threadé» Classes facilitant la programmation réseau TCP /IP en C# Démon xinetd Serveur stateless Le projet réseau

Serveur Multi threadé Dans le cas d un serveur itératif, le serveur ne peut délivré qu un unique service à la fois (sauf si on utilise la fonction Select()). On va confié la partie dialogue avec le client à un thread afin de pouvoir servir plusieurs clients en même temps. Le code du processus client ne change pas! On suppose qu on dispose d une classe CClient qui contient une méthode statique appelée PgmClient qui contient le protocole de communication entre le serveur et le client.

Serveur Multi threadé Code du serveur Socket Soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint IPMonServeur = ; Soc.Bind(IPMonServeur); Soc.Listen(10); while (true) { Socket SocClient = Soc.Accept(); Thread ThreadClient = new Thread(new ParameterizedThreadStart(CClient.PgmClient)); ThreadClient.Start(SocClient); } Soc.Close();

Serveur Multi threadé La classe CClient public static void PgmClient(Object SocClient) { if (SocClient.GetType().Name == "Socket") { Socket Soc = (Socket)SocClient; NetworkStream NS = new NetworkStream(Soc); BinaryWriter BW = new BinaryWriter(NS); CPersonne P = new CPersonne("Casali", "alain", 30); BW.Write((string)P._nom); BW.Write((string)P.prenom); BW.Write((int)P._age); BW.Close(); NS.Close(); Soc.Close(); } }

Plan du cours La socket vue comme un flux Les threads Serveur Multi threadé Serveur «pré threadé» Classes facilitant la programmation réseau TCP /IP en C# Démon xinetd Serveur stateless Le projet réseau

Serveur «pré threadé» Serveur concurrent : 1 thread (esclave) par connexion demandée. Serveur facile à mettre en place Lent : duplication de la table des pages Idée : créer un pool d esclaves pouvant satisfaire plusieurs demandes avant que celles ci ne soient formulées. Les threads ne meurent pas après avoir rendu leur service : ils attendent qu une autre demande leur parviennent Gain de temps pour satisfaire la demande du client

Serveur «pré threadé» Répartition équitable de l activité entre les esclaves serveur doit être informé de l'activité de ses fils (dispo/occupé : IsAlive) serveur surveille les ressources consommées par ses fils serveur doit répartir l'activité (nécessité de communiquer entre les processus) Gestion des accidents : quand un fils meurt, le serveur doit le relancé au plus vite Gestion dynamique du pool d esclaves : Pic de charge : tous les esclaves occupés; le serveur doit en augmenter le nombre (dans la limite du paramètre de Accept()) Calme : faible taux d utilisation des esclaves : le serveur doit en diminuer le nombre.

Plan du cours La socket vue comme un flux Les threads Serveur Multi threadé Serveur «pré threadé» Classes facilitant la programmation réseau TCP /IP en C# Démon xinetd Serveur stateless Le projet réseau

La classe TcpClient Classe permettant de représenter un client TCP / IP. Espace de nom : System.Net.Sockets Trois constructeurs : 1. public TcpClient ( IPEndPoint localep ) 2. public TcpClient ( IPAddress localaddr, int port ) 3. public TcpClient () Attention : les deux premiers constructeurs font un appel sous jacent à la fonction Bind()!!

La classe TcpClient Méthodes de la classe TcpClient public void Connect ( IPEndPoint remoteep ) public void Connect ( IPAddress address, int port ) Connecte le client à un hôte TCP distant en utilisant le point de terminaison réseau distant (l'adresse IP et le numéro de port) spécifié(s). public NetworkStream GetStream () Retourne le NetworkStream utilisé pour l'envoi et la réception de données. public void Close () Supprime cette instance de TcpClient sans fermer la connexion sousjacente (la connexion TCP). L'appel à cette méthode ne libère pas le NetworkStream utilisé pour envoyer et recevoir des données. Vous devez appeler la méthode Close du NetworkStream pour fermer le flux et la connexion TCP.

La classe TcpClient Code générique d un TcpClient IPEndPoint IPServeur = ; TcpClient Client = new TcpClient(); Client.Connect(IPServeur); NetworkStream NS = Client.GetStream(); BinaryReader BR = new BinaryReader(NS); BR.Close(); NS.Close(); Client.Close();

La classe TcpListener Classe permettant de représenter un serveur TCP / IP. Espace de nom : System.Net.Sockets Deux constructeurs : 1. public TcpListener ( IPEndPoint localep ) 2. public TcpListener ( IPAddress localaddr, int port )

La classe TcpListener Méthodes de la classe TcpListener public void Start () public void Start ( int backlog ) Lance l'écoute des demandes de connexion entrantes avec un nombre maximal de connexions en attente. public TcpClient AcceptTcpClient() Accepte une demande de connexion en attente public void Stop () Ferme l'écouteur.

La classe TcpListener Code générique d un TcpListener IPEndPoint IPServeur = ; TcpListener serveur = new TcpListener(IPServeur); serveur.start(); while (true) { TcpClient Client = serveur.accepttcpclient(); NetworkStream NS = Client.GetStream(); BinaryWriter BW = new BinaryWriter(NS); BW.Close(); NS.Close(); Client.Close(); } Serveur.Close();

La classe TcpListener Code générique d un TcpListener Multi threadé 1. Création d une fonction contenant le protocole de communication. static void pgmclient(object MonClient) { if (MonClient.GetType().Name == "TcpClient") { TcpClient Client = (TcpClient)MonClient; } } 2. On modifie la boucle while() dans le code du serveur while (true) { TcpClient Client = serveur.accepttcpclient(); Thread ThClient = new Thread( new ParameterizedThreadStart (pgmclient)); ThClient.Start(Client); }

Plan du cours La socket vue comme un flux Les threads Serveur Multi threadé Serveur «pré threadé» Classes facilitant la programmation réseau TCP /IP en C# Démon xinetd Serveur stateless Le projet réseau

Démon xinetd Chaque service réseau est programmé comme un daemon avec 1 ou plusieurs sockets, surveillant son ou ses ports de communication. C est ce qu on appelle un fonctionnement «stand alone» C était le cas avant BSD 4.3 On doit maintenir dans la mémoire primaire (RAM) ou secondaire (zone de «swap») beaucoup de processus inutiles à instant donné, juste au cas où Consommation importante des ressources systèmes d autant que le nombre de services augmente Tous les serveurs effectuent les mêmes séquences d instructions au démarrage, seuls changent les protocoles liés à l application (ce que chaque serveur doit faire).

Démon xinetd (2) Apparu dans BSD 4.3 xinetd est un serveur de serveurs Il est utilisable par tout serveur TCP / UDP Il fournit essentiellement 2 services : 1. Un unique processus attend les multiples demandes de connexion. Le nombre de processus en attente est donc réduit. 2. Il simplifie l écriture des serveurs car il prend en charge la connexion. Les serveurs lisent les demandent sur leur entrée standard et répondent sur leur sortie standard. Serveur concurrent mutli-services, multi-protocoles Fichier de configuration : /etc/xinetd.conf

Fonctionnement simplifié (1) socket() bind() listen () (socket TCP) Pour chaque service trouvé dans /etc/xinetd.conf select () accept () (socket TCP) père close () fork () fils (socket TCP)

Fonctionnement simplifié (2) close () Descr. autre que la socket dup() Socket vers 0,1,2 close(socket) setgid() setuid() (si non root) exec() (du serveur)

Démon xinetd (3) ]$ ps alx grep xinetd 0 2470 1 25 0 2564 768 select Ss Pid ppid select() sleeping -stayalive Tourne même si aucun service n est spécifié ]$ more /etc/xinetd.d/sshd-xinetd # default: off # description: sshd server, xinetd version. \ # Don't run the standalone version if you run \ # this. service ssh Type de service à employer /etc/services { disable = yes socket_type = stream wait = no Serveur itératif user = root server = /usr/sbin/sshd server_args = -i }

Plan du cours La socket vue comme un flux Les threads Serveur Multi threadé Serveur «pré threadé» Classes facilitant la programmation réseau TCP /IP en C# Démon xinetd Serveur stateless Le projet réseau

Serveur stateless (1) Stateless : se rapporte à un système ou à un protocole qui ne garde pas un état persistant entre les transactions. Avantages : 1. Serveur simple à mettre à place 2. Pas de pertes de ressources pour mémoriser l avancement 3. Serveur plus robuste : perte de connexion ne laisse pas des données dans un état invalide (fichier par ex.) redémarrage du serveur ne perd pas l'information d'état redémarrage du client ne trouble pas le serveur Inconvénients : 1. requêtes comportent plus d'information 2. serveur doit interpréter information supplémentaire à chaque requête plus long

Serveur stateless (2) Exemple de serveur stateless : web Requête complète dans l URL Aucune mémorisation des précédentes requêtes Inconvénients : Les pages précédentes/suivantes doivent être codée «en dur» E commerce : Base de données mémorisant les informations Cookies Encapsulation de clés dans l url ce n est pas le serveur http qui le fait!!!

Serveur statefull Il y a mémorisation des précédentes transactions Exemple de serveur statefull : serveur ftp Requête de transferts de fichier : Client identifié Répertoire courrantmémorisé Mode de transfert (ASCII / binaire) identifié Crash serveur statefull : nécessite un dialogue avec le client pour restaurer l état courrant

Plan du cours La socket vue comme un flux Les threads Serveur Multi threadé Serveur «pré threadé» Classes facilitant la programmation réseau TCP /IP en C# Démon xinetd Serveur stateless Le projet réseau

Projet Réseau Objectif : réaliser une application de sauvegarde / restauration (ou de synchronisation) de document(s) (fichier(s)) Votre client (au moins) devra permettre : l'enregistrement sur le serveur; la modification du mot de passe; la connexion au serveur; l'envoi / la réception de fichiers; la spécification des fichiers (répertoires / sousrépertoires) à sauvegarder.

Projet Réseau Votre serveur devra (au moins) : permettre l'autentification d'un client via le SGBD MySQL; autoriser la connexion si l'identifiant et le mot de passe du client sont correctes; permettre la modification d'un mot de passe; permettre l'envoi / la réception de fichier stocker les fichiers reçus dans une arborescence appropriée.

Projet Réseau Dates importantes : 19 décembre 2008 : constitution des groupes de projets. 19 janvier 2009 : avant projet à rendre 9 mars 2009 : projet à rendre 16 mars 2009 28 mars 2009 : présentation du projet