Page précédente Page suivante Table des matières

3. La conversation téléphonique.

Maintenant que vous disposez d'une connexion entre deux sockets, vous allez vouloir échanger des données entre les deux machines mises en jeu (ou la même, le réseau étant transparent, il peut s'agir de processus sur le même système, peu importe). Et là, vous allez voir la magie de la chose : on utilise les fonctions read() et write(), car ces sockets se présentent sous la forme de descripteurs de fichiers ! Il y a toutefois une différence majeure à prendre en compte par rapport aux fichiers; vous ne récupérez généralement pas le nombre de caractères que vous avez demandé ; il vous faut boucler jusqu'à avoir lu le compte désiré. Voici une fonction simple permettant de lire des caractères depuis une socket, pour les mettre dans un tampon :


 
int read_data(s,buf,n)
int s;                  /* socket connectee             */
char *buf;              /* pointeur sur le tampon       */
int n;                  /* nombre de caracteres desires */
{
        int bcount,             /* compteur de caracteres lus au total */
                br;             /* nombre de caracteres lus cette fois */

        bcount = 0;
        br = 0;
        while (bcount < n) {                    /* boucle jusqu'a remplissage du tampon  */
                if ((br = read(s, buf, n-bcount)) > 0) {
                        bcount += br;           /* incrementation compteur de caracteres */
                        buf += br;              /* deplace le pointeur d'une position    */
                        }
                else if (br < 0)                /* signale qu'une erreur s'est produite  */
                        return(-1);
                }
        return(bcount);
}
  

Il suffit d'écrire une fonction similaire pour l'écriture des données. Cela constituera un excellent exercice pour le lecteur.


Page précédente Page suivante Table des matières