在服务器上实现输入管道

若要开始将数据发送到服务器,客户端会调用服务器的远程过程之一。 此过程必须重复调用服务器的存根中的拉取过程。 MIDL 编译器使用应用程序的 IDL 文件自动生成服务器的拉取过程。

每次服务器程序在其存根中调用拉取过程时,拉取过程都会从客户端接收数据块。 它将数据解封到服务器的缓冲区中。 然后,服务器的远程过程可以按所需的任何方式处理此数据。 循环一直持续到服务器收到长度为零的缓冲区。

以下示例来自平台软件开发工具包 (SDK) 附带的示例中包含的 Pipedemo 程序。 它演示了一个使用管道将数据从客户端拉取到服务器的远程服务器过程。

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