Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 15
- 16
- 17
- 18
- 19
- …
- следующая ›
- последняя »