Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby rozpocząć odbieranie danych z serwera, klient wywołuje jedną z procedur zdalnych serwera. Ta procedura musi wielokrotnie wywoływać procedurę wypychania w szkielecie serwera. Kompilator MIDL używa pliku IDL aplikacji do automatycznego generowania procedury push serwera.
Procedura serwera zdalnego musi wypełnić bufor potoku wyjściowego danymi, zanim wywoła procedurę wypychania. Za każdym razem, gdy program serwera wywołuje procedurę wypychania w wycinku, procedura wypychania marshaluje dane i przesyła je do klienta. Pętla będzie kontynuowana do momentu, w którym serwer wyśle bufor o zerowej długości.
Poniższy przykład pochodzi z programu Pipedemo zawartego w przykładach, które są dostarczane z zestawem Windows SDK. Ilustruje to procedurę zdalnego serwera, która przesyła dane za pomocą potoku z serwera do klienta.
void OutPipe(LONG_PIPE *outputPipe )
{
long *outputPipeData;
ulong index = 0;
ulong elementsToSend = PIPE_TRANSFER_SIZE;
/* Allocate memory for the data to be passed back in the pipe */
outputPipeData = (long *)malloc( sizeof(long) * PIPE_SIZE );
while(elementsToSend >0) /* Loop to send pipe data elements */
{
if (index >= PIPE_SIZE)
elementsToSend = 0;
else
{
if ( (index + PIPE_TRANSFER_SIZE) > PIPE_SIZE )
elementsToSend = PIPE_SIZE - index;
else
elementsToSend = PIPE_TRANSFER_SIZE;
}
outputPipe->push( outputPipe->state,
&(outputPipeData[index]),
elementsToSend );
index += elementsToSend;
} //end while
free((void *)outputPipeData);
}
Tematy pokrewne