lundi 25 mars 2013

Création d'un serveur en Java [1/2]

La création d'un serveur java est relativement aisé.
En effet, la JRE met à disposition un ensemble de classe effectuant le plus gros du travail.

La classe java dédier à la partie serveur est ServerSocket. Elle permet d'écouter un port de la machine, puis d'attendre des clients.

Trois méthodes vont être intéressante getInputStream(), getOutputStream(), accept().

La méthode getInputStream() permet de lire les données du client.
La méthode getOutputStream() permet d'écrire au client.
La méthode accept() permet d'attendre l'arrivé de client.

Il est donc nécessaire de :
  1. créer un serveur,
  2. attendre un client,
  3. créer un stream pour la lecture des données client,
  4. créer un stream pour l'écriture vers le client.

Voic un exemple simple d'un serveur Echo qui affiche les données envoyés par le client :
package org.emeric.exemple.echo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {

    public static void main(String[] args) throws Exception {
        System.out.println("Demarrage...");
        ServerSocket s = new ServerSocket(4444);
        Socket soc = s.accept();

        // Un BufferedReader permet de lire par ligne.
        BufferedReader plec = new BufferedReader(new InputStreamReader(
                soc.getInputStream()));

        // Un PrintWriter possède toutes les opérations print classiques.
        // En mode auto-flush, le tampon est vidé (flush) à l'appel de println.
        PrintWriter pred = new PrintWriter(new BufferedWriter(
                new OutputStreamWriter(soc.getOutputStream())), true);

        String str = null;

        do {
            // lecture du message
            str = plec.readLine(); 
            // renvoi d'un écho
            pred.println(str); 
        } while (str != null);

        plec.close();
        pred.close();
        soc.close();

        System.out.println("Fin");
    }
}

Ce serveur est très basique car il n'accepte qu'un client.
Dans la prochain étape, ce serveur sera multi-threadé pour accèter plusieurs clients.

Aucun commentaire:

Enregistrer un commentaire