Программирование для Windows NT (том 2)



         

Приложение PIPES - часть 4


После успешного создания канала приложение PIPES входит в цикл получения команд от клиентского приложения PIPEC:

while(1)

{

  if(ReadFile(hNamedPipe, szBuf, 512, &cbRead, NULL))

  {

    if(!WriteFile(hNamedPipe, szBuf, strlen(szBuf) + 1,

        &cbWritten, NULL))

        break;

    printf("Received: <%s>\n", szBuf);

    if(!strcmp(szBuf, "exit"))

        break;

  }

  else

  {

    fprintf(stdout,"ReadFile: Error %ld\n",

      GetLastError());

    getch();

    break;

  }

}

В этом цикле серверное приложение читает команду из канала, пользуясь для этого обычной функцией ReadFile, которую вы знаете из предыдущей главы нашей книги. Так как канал работает в синхронном блокирующем режиме, функция ReadFile будет находиться в состоянии ожидания до тех пор, пока клиентское приложение не пришлет через канал Pipes сообщение с командой. Принятое сообщение записывается в буфер szBuf, а его размер - в переменную cbRead.

Если сообщение принято успешно, оно тут же посылается обратно, для чего серверное приложение посылает его обратно при помощи функции WriteFile. Так как сообщение представляет собой текстовую строку, закрытую двоичным нулем, при посылке размер сообщения вычисляется как длина этой строки плюс один байт.

Далее серверное приложение сравнивает принятую команду со строкой exit. Если от клиента пришла эта строка, цикл получения команд завершается.




Содержание  Назад  Вперед