Udostępnij przez


Implementowanie potoków wejściowych na serwerze

Aby rozpocząć wysyłanie danych do serwera, klient wywołuje jedną z procedur zdalnych serwera. Ta procedura musi wielokrotnie wywoływać procedurę ściągania w wycinku serwera. Kompilator MIDL używa pliku IDL aplikacji do automatycznego generowania procedury ściągania serwera.

Za każdym razem, gdy program serwera wywołuje procedurę ściągania w wycinku, procedura ściągania odbiera bloki danych od klienta. Dane są odłączane od buforu serwera. Procedura zdalna serwera może następnie przetwarzać te dane w dowolny sposób. Pętla będzie kontynuowana, dopóki serwer nie otrzyma buforu o zerowej długości.

Poniższy przykład pochodzi z programu Pipedemo zawartego w przykładach, które są dostarczane z zestawem Platform Software Development Kit (SDK). Ilustruje to procedurę serwera zdalnego, która używa potoku do ściągania danych z klienta do serwera.

//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