Учебно-методический комплекс по учебной дисциплине «компьютерные сети»


Для связи сервера с несколькими клиентами по одному именованному



Pdf просмотр
страница7/100
Дата19.07.2022
Размер1.22 Mb.
#130979
ТипУчебно-методический комплекс
1   2   3   4   5   6   7   8   9   10   ...   100
umk seti chast 2
1703
Для связи сервера с несколькими клиентами по одному именованному
каналу сервер должен создать несколько экземпляров этого канала. Каждый экземпляр именованного канала создается вызовом функции CreateNamedPipe,


Компьютерные сети - курс лекций Гуманитарный факультет
11 которая возвращает дескриптор экземпляра именованного канала. Отметим, что в этом случае поток, создающий экземпляр именованного канала, должен иметь право доступа
FILE
_
CREATE
_
PIPE
_
INSTANCE К именованному каналу. Этим правом по умолчанию обладает владелец именованного канала, т. е. тот процесс, который создал этот именованный канал.
5. Соединение сервера с каналом
[1]


После того как сервер создал именованный канал, он должен дождаться
соединения клиента с этим каналом.
Для этого сервер вызывает функцию
ConnectNamedPipe
, которая имеет следующий прототип:
BOOL
ConnectNamedPipe
(
HANDLE hNamedPipe,
//
дескриптор канала
LPOVERLAPPED lpOverlapped //
асинхронная связь
) ;
В случае успешного завершения эта функция возвращает ненулевое значение, а в случае неудачи — значение
FALSE
Сервер использует эту функцию для связи с клиентом по каждому свободному экземпляру именованного канала.
После окончания обмена данными с клиентом сервер может вызвать
функцию
DisconnectNamedPipe
, которая имеет следующий прототип:
BOOL
DisconnectNamedPipe
(
HANDLE hNamedPipe // дескриптор канала
) ; и возвращает ненулевое значение в случае успеха или значение
FALSE
— в случае неудачи. Эта функция разрывает связь сервера с клиентом. После этого клиент не может обмениваться данными с сервером по данному именованному каналу, и поэтому любая операция доступа к именованному каналу со стороны клиента вызовет ошибку. После разрыва связи с одним клиентом сервер снова может вызвать функцию ConnectNamedPipe, чтобы установить связь по этому же именованному каналу с другим клиентом.


Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9   10   ...   100




База данных защищена авторским правом ©vossta.ru 2022
обратиться к администрации

    Главная страница