Serveur TCP générique

Ceci est un exemple de base de serveur TCP. Ce serveur ne fait rien, à vous de coder la partie manquante (traitement).

class ServeurTcp {
    void servir(int noPort) {
        try {
            ServerSocket serveur = new ServerSocket(noPort);

            /*
            * La variable "enService" contrôle la boucle principale du serveur
            * qui se termine avec l'application. À vous de trouver une façon
            * d'en changer la valeur.
            */
            boolean enService = true;

            while (enService) {
                /*
                 * Le programme est ici bloqué dans l'attente d'une connexion. La
                 * connexion aura pour effet de créer un socket (variable "client")
                 * branché à l'application distante.
                 */
                Socket client = serveur.accept();

                /*
                 * Création des flux d'entrée-sortie pour échanger de l'information
                 * avec le client en format binaire. On utilisera (mais il peut y
                 * en avoir d'autres plus appropriées) les méthodes "readByte" pour
                 * lire et "writeByte" pour écrire.
                 *
                 *
                 * DataInputStream in =
                 *      new DataInputStream(client.getInputStream());
                 *
                 * DataOutputStream out =
                 *      new DataOutputStream(client.getOutputStream());
                 */

                /*
                 * Création des flux d'entrée-sortie pour échanger de l'information
                 * avec le client en format texte. On utilisera les méthodes
                 * "readLine" pour lire et "println" pour écrire.
                 */
                BufferedReader reader =
                        new BufferedReader(
                            new InputStreamReader(client.getInputStream()));

                PrintWriter writer =
                        new PrintWriter(
                            new OutputStreamWriter(client.getOutputStream()));

                /*
                 * La variable "fini" contrôle la boucle secondaire, celle qui se
                 * se termine avec la déconnexion d'un client. À vous de trouver
                 * une façon d'en changer la valeur.
                 */
                boolean fini = false;

                while (!fini) {
                   /*
                    * Traitement (lecture des requêtes du client et écriture des
                    * réponses du serveur).
                    */
                }

                /*
                 * Libération des ressources à la fin du traitement d'un client.
                 */
                reader.close();
                writer.close();
                client.close();
            }

            serveur.close();
        } catch (IOException ioe) {
             /*
              * Ici on choisit de quitter l'application, mais il y aurait peut-être
              * moyen de traiter l'exception.
              */
             System.err.println("Erreur d'entre-sortie");
             System.exit(1);
        }
    }

   /*
    * Point d'entrée de l'application, cette méthode fait trois choses :
    * 1) valide les paramètres de la ligne de commande;
    * 2) crée une instance de la classe courante;
    * 3) appelle une méthode de l'objet pour démarrer le traitement.
    */
    public static void main(String[] args) {
        switch (args.length) {
            case 0:
                System.err.println("Vous devez specifier un numero de port");
                break;
            case 1:
                try {
                    int noPort = Integer.parseInt(args[0]);

                    if ((noPort >= 0) && (noPort <= 65537)) {
                        new ServeurTcp().servir(noPort);
                    } else  {
                        System.err.println("Le numero de port est hors intervale");
                    }
                } catch (NumberFormatException nfe) {
                    System.err.println(
                            "Le numero de port doit etre un nombre entier");
                }
                break;
            default:
                System.err.println("Il y a trop de parametres");
                break;
        }
    }
}