% Preamble
\documentclass[a4paper,12pt]{article}

% Packages
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tabularx}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{eurosym}
\usepackage{epsfig}
\usepackage{stmaryrd}

% Title
\title{Pente : Echo Server}
\author{D.Moreaux}

% Document
\begin{document}
\maketitle
\section{Code à réaliser}
On commencera par mettre en place la connexion réseau et la boucle principale qui permet de gérer cette
dernière ainsi qu'un client python de base.

A cet effet, le code ouvrira le port 55555 en TCP en écoute et puis, une boucle basée sur la fonction
\verb|select()| se chargera d'accepter les connexion, de lire les données reçue et de retourner les
messages reçus à l'expéditeur.

Ce code pourra être testé à l'aide d'un client telnet comme PuTTY ou d'un programme python basique qui
effectuera la connexion et utilisera la fonction \verb|input()| pour demander un texte et \verb|print()|
pour afficher ce qui sera reçu du serveur (pas d'interface graphique à ce niveau).

\section{Le serveur}
Le code pourra être effectué en plusieurs étapes.
\subsection{Ecoute du port TCP/55555}
La première version du code se contentera d'ouvrir le port, accepter une connection, lire un message
de cette connexion et réécrire le dit message sur le socket avant de fermer les sockets (connexion et
socket de réception) et quitter.

Le serveur affichera éventuellement l'adresse IP de la personne se connectant.

\subsection{Boucle de réception}
L'étape suivante sera de mettre en place un tableau\footnote{on peut utiliser TEMPORAIREMENT un
tableau mais au final, il faudra utiliser une liste liée pour permettre une allocation dynamique}
ou une liste liée de connexions.

Une fois la connexion lancée, une boucle sans fin fera les étapes suivantes :
\begin{itemize}
    \item Préparer la liste des sockets en lecture et exception pour le socket de contrôle et les sockets
          des connexions en cours
    \item Effectuer un \verb|select()| pour détecter les connexions ayant de l'activité
    \item Si une nouvelle connexion est faite, l'ajouter dans la table ou liste de connexions.
    \item Si des données peuvent être lues, les écrire en retour sur le même socket\footnote{Plus tard, on
          ajoutera des buffers d'entrée et de sortie}
    \item Si une exception a lieu, fermer le socket correspondant et retirer la connexion de la liste ou
          du tableau.
\end{itemize}

\section{Le client}
Le client utilisera l'interface socket. Il commencera par créer la connexion puis fera une boucle sans fin dans
laquelle il lira une chaîne. Si cette chaîne est ``quit'', le programme fermera la connexion et s'arrêtera.

Sinon, il enverra la chaîne au serveur, lira le retour et affichera ce dernier avant de boucler.

\end{document}