lundi 19 mars 2012

Commmunication TCP en Java

<<L'observation scientifique est toujours une observation polémique. >>
Gaston Bachelard



Ceci est un tutoriel permettant de concevoir simplement une communication TCP en Java.
Le code est bien commenté et bien indenté ; j'espère qu'il sera compris avec facilité.

Pour en savoir plus sur le protocole TCP, vous pouvez vous référer à l'article TCP/IP.

Le programme serveur se présente ainsi:

import java.io.*;
public class ServeurTCP {
    public static void main(String[] args)throws Exception {
       
        //S'attacher à un port
        ServerSocket ss = new ServerSocket(7500);
        //Attendre les connexion des clients
        System.out.print("Attente connexion...");
       
        /*
         * NB : La methode accept() bloque le programme jusqu'à ce
         * qu'une connexion soit établie
         */
        Socket s = ss.accept();//Bloquant
       
        //Création du flux binaire de lecture
        InputStream is = s.getInputStream();
        //Création du flux binaire d'écriture
        OutputStream os = s.getOutputStream();
       
        /*
         * NB: La nature des filtres dépend de la nature de
         *        l'information initiale 
         */
        //Filtre de lecture de texte
        BufferedReader tmp = new BufferedReader(new InputStreamReader(is));
        //Filtre d'ecriture de texte
        PrintWriter pw = new PrintWriter(os,true);       



        
        //Lecture de la chaine envoyée par le client
        String recep = tmp.readLine();

        //Je me demande bien ce que fait cette ligne ici
        recep = new StringBuffer(recep).reverse().toString();
       
        //Renvoi au client
        pw.println(recep);    
    }
}

Et de son côté, le client TCP (beaucoup plus simple) s'écrit juste en ces quelques lignes:
NB: Je crois qu'il n'y a rien à commenter sur le client !

import java.net.*;
import java.io.*;
public class ClientTCP {
    public static void main(String[] args)throws Exception {
        //Sattacher à un port     (ici peut être?)
        Socket s = new Socket("localhost", 7500);
       
        InputStream is =  s.getInputStream();
        OutputStream os=s.getOutputStream();
       
        BufferedReader tmp = new BufferedReader(new InputStreamReader(is));
       
        PrintWriter pw = new PrintWriter(os,true);
       
        pw.println("Hello World !");
        System.out.print("Reçu du serveur: "+tmp.readLine());
    }
}

Voilà, c'est rien que ça !
Vous avez réussi à implémenter une communication fiable entre un client et un serveur.
C'est fou ce qu'on nous fatigue pour des choses aussi banales ! ;-)
N'hésitez pas à poster vos commentaires et éventuellement de contribuer à ce blog.
Sinon "enjoyez !".