Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kursOS.doc
Скачиваний:
4
Добавлен:
20.11.2019
Размер:
162.82 Кб
Скачать
  1. Cетевой чат на основе именованных каналов с выделенным сервером

---------------------------------------------------------------------------------------

Для работы с именованным каналом используется функция CreateNamePipe

Именованные каналы.

Каналы – способ локального и сетевого взаимодействия.

  1. функции сервера

  2. функции клиента

Каналы должны быть с одним именем.

  1. СЕРВЕР

Создать канал: HANDLE CreateNamePipe(

LPCTSRT pipename,

DWORD openmode, // режим открытия

DWORD pipemode,

DWORD maxinstance,

DWORD outbufsize,

DWORD inbufsize,

LPSECURITY ATTRIBUTES ProcAttr,//атрибуты безопасности

)

Имя канала: \\.\pipe\<имя > - до 256 символов

FILE_FLAG_FIRST_PIPE_INSTANCE – может присутствовать во втором параметре:

PIPE_ACCESS_DUPLEX, PIPE_ACCESS_INBOUND, PIPE_ACCESS_OUTBOUND

FILE_FLAG_WRITE_THROUGH – если процессы находятся на разных машинах в сети

FILE_FLAG_OVERLAPPED – асинхронный режим (для канала)

PIPE_TYPE_BYTE и PIPE_TYPE_MESSAGE – каждая запись в канал – пакет

PIPE_READMODE_BYTE, PIPE_READMODE_MESSAGE

MAXINSTANCES – max допустимое число каналов с таким именем

PIPE_UNLIMITED_INSTANCES

DEFOULTTimeout – время ожидания

Серверная сторона

CREATE_NAMED_PIPE

BOOL ConnectNamePipe(HANDLE h, LPOVERLAPPED Ov)

BOOL DisconnectNamedPipe(HANDLE h)

  1. КЛИЕНТ

BOOL WiatNamedPipe(LPCTSTR Name, DWORD TimeOut)

Подключиться к каналу:

CreateFile

В виде имени – имя канала \\<pc>\piep\<имя>

BOOL CallNamedPipe(

LPCTSTR NamePipe, //имя канала

LPVOID InBuf, // входные параметры

DWORD InSize, // сколько будет отправлено байт

LPVOID OutBuf, // выходной результат

DWORD OutSize, // полный размер буфера

LPDWORD BytesRead, // сколько реально прочитано

DWORD TimeOut)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]