Организация вычислительных процессов в ЭВМ. Лясин Д.Н - 17 стр.

UptoLike

Составители: 

17
В любой момент сервер может отключить клиента, вызвав функцию
DisconnectNamedPipe:
BOOL DisconnectNamedPipe( HANDLE hNamedPipe);
Через единственный параметр этой функции передается дескриптор эк-
земпляра канала, полученного при вызове функции CreateNamedPipe. Если
канал больше не нужен, сервер и клиент должны закрыть его функцией
CloseHandle.
Рассмотрим пример взаимодействия сервера и клиента с помощью
именованных каналов.
//
Фрагмент приложения-сервера
HANDLE hNamedPipe;
BOOL bConnect;
char buf[512];
//Создаем объектименованный канал в ждущем дуплексном режиме
HnamedPipe =CreateNamedPipe(“\\\\.\\pipe\\mypipe
” ,PIPE_ACCESS_DUPLEX
, PIPE_TYPE_MESSAGE | PIPE_WAIT | PIPE_READMODE_MESSAGE,
PIPE_UNLIMITED_INSTANCES , 512 , 512 , 5000,NULL);
//Если создать канал не удалосьсообщение об ошибке
if (hNamedPipe==INVALID_HANDLE_VALUE)
MessageBox(NULL, "Невозможно создать канал",”Ошибка",MB_OK);
else
//иначе - ожидаем подключения клиента
bConnect=ConnectNamedPipe(hNamedPipe,NULL);
//после подключения клиента считываем данные из канала в строку buf
ReadFile(hNamedPipe,buf,512,&count,NULL))
//и возвращаем эти данные клиенту в качестве подтверждения
WriteFile(hNamedPipe,buf,512,&count,NULL)
        В любой момент сервер может отключить клиента, вызвав функцию
DisconnectNamedPipe:
BOOL DisconnectNamedPipe( HANDLE hNamedPipe);
        Через единственный параметр этой функции передается дескриптор эк-
земпляра канала, полученного при вызове функции CreateNamedPipe. Если
канал больше не нужен, сервер и клиент должны закрыть его функцией
CloseHandle.
        Рассмотрим пример взаимодействия сервера и клиента с помощью
именованных каналов.


//Фрагмент приложения-сервера
HANDLE hNamedPipe;
BOOL bConnect;
char buf[512];
//Создаем объект – именованный канал в ждущем дуплексном режиме
HnamedPipe =CreateNamedPipe(“\\\\.\\pipe\\mypipe” ,PIPE_ACCESS_DUPLEX
       , PIPE_TYPE_MESSAGE | PIPE_WAIT | PIPE_READMODE_MESSAGE,
       PIPE_UNLIMITED_INSTANCES , 512 , 512 , 5000,NULL);
//Если создать канал не удалось – сообщение об ошибке
if (hNamedPipe==INVALID_HANDLE_VALUE)
  MessageBox(NULL, "Невозможно создать канал",”Ошибка",MB_OK);
else
//иначе - ожидаем подключения клиента
bConnect=ConnectNamedPipe(hNamedPipe,NULL);
//после подключения клиента считываем данные из канала в строку buf
ReadFile(hNamedPipe,buf,512,&count,NULL))
//и возвращаем эти данные клиенту в качестве подтверждения
WriteFile(hNamedPipe,buf,512,&count,NULL)




                                     17