Поделиться через


Реализация входных каналов на сервере

Чтобы начать отправку данных на сервер, клиент вызывает одну из удаленных процедур сервера. Эта процедура должна многократно вызывать процедуру извлечения в заглушку сервера. Компилятор MIDL использует IDL-файл приложения для автоматического создания процедуры извлечения сервера.

Каждый раз, когда серверная программа вызывает процедуру извлечения в заглушку, процедура извлечения получает блоки данных от клиента. Он распланирует данные в буфер сервера. После этого удаленная процедура сервера может обработать эти данные любым необходимым способом. Цикл продолжается до тех пор, пока сервер не получит буфер нулевой длины.

Следующий пример является примером программы Pipedemo, содержащейся в примерах, которые поставляются с пакетом средств разработки программного обеспечения платформы (SDK). В нем показана процедура удаленного сервера, использующая канал для извлечения данных из клиента на сервер.

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