Partager via


Implémentation de canaux d’entrée sur le serveur

Pour commencer à envoyer des données à un serveur, un client appelle l’une des procédures distantes du serveur. Cette procédure doit appeler à plusieurs reprises la procédure d’extraction dans le stub du serveur. Le compilateur MIDL utilise le fichier IDL de l’application pour générer automatiquement la procédure d’extraction du serveur.

Chaque fois que le programme serveur appelle la procédure d’extraction dans son stub, la procédure d’extraction reçoit des blocs de données du client. Il démarhale les données dans la mémoire tampon du serveur. La procédure distante du serveur peut ensuite traiter ces données de n’importe quelle manière. La boucle continue jusqu’à ce que le serveur reçoive une mémoire tampon de longueur nulle.

L’exemple suivant provient du programme Pipedemo contenu dans les exemples fournis avec le Kit de développement logiciel (SDK) de plateforme. Il illustre une procédure de serveur distant qui utilise un canal pour extraire des données du client vers le serveur.

//file: server.c (fragment)
#include uc_server.c
#define PIPE_TRANSFER_SIZE 100 /* Transfer 100 pipe elements at one time */
 
void InPipe(LONG_PIPE     long_pipe )
{
    long local_pipe_buf[PIPE_TRANSFER_SIZE];
    ulong actual_transfer_count = PIPE_TRANSFER_SIZE;
 
    while(actual_transfer_count > 0) /* Loop to get all 
                                        the pipe data elements */
    {
        long_pipe.pull( long_pipe.state,
                        local_pipe_buf,
                        PIPE_TRANSFER_SIZE,
                        &actual_transfer_count);
        /* process the elements */
    } // end while
} //end InPipe