Контрольная работа: Почтовые каналы передачи данных Mailslot

Второй параметр nMaxMsgSize определяет максимальный размер сообщений, передаваемых через создаваемый канал Mailslot.

Здесь можно указать нулевое значение, при этом размер сообщений не будет ограничен. Есть, однако, одно исключение - размер широковещательных сообщений, передаваемых всем рабочим станциям и серверам домена не должен превышать 400 байт.

С помощью третьего параметра lReadTimeout серверное приложение может задать время ожидания для операции чтения в миллисекундах, по истечении которого функция чтения вернет код ошибки.

Если указать в этом параметре значение MAILSLOT_WAIT_FOREVER, ожидание будет бесконечным.

Четвертый параметр lpSecurityAttributes задает адрес структуры защиты, который мы в наших приложениях будем указывать как NULL.

Пример 1

Представим использование функции CreateMailslot()в серверном приложении:

LPSTR lpszMailslotName = "\\\\.\\mailslot\\$MailslotName$";

hMailslot = CreateMailslot(lpszMailslotName, 0, MAILSLOT_WAIT_FOREVER, NULL);

В этом примере задан максимальный размер сообщения, поэтому на эту величину нет ограничений (кроме ограничения в 400 байт для сообщений, передаваемых всем компьютерам домена в широковещательном режиме).

Время ожидания указано как MAILSLOT_WAIT_FOREVER, поэтому функции, работающие с данным каналом Mailslot будут работать в блокирующем режиме.


Открытие канала Mailslot

Прежде чем приступить к работе с каналом Mailslot, клиентский процесс должен его открыть.

Для выполнения этой операции следует использовать функцию CreateFile(), например, так:

LPSTR lpszMailslotName = "\\\\.\\mailslot\\$MailslotName$";

hMailslot = CreateFile (lpszMailslotName, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

Здесь в качестве первого параметра функции CreateFile() передается имя канала Mailslot

Заметим, что возможно открыть канал Mailslot, созданный на другой рабочей станции в сети. Для этого строка имени канала, передаваемая функции CreateFile(), должна иметь следующий вид: \\ИмяРабочейСтанции\mailslot\[Путь]ИмяКанала

Можно открыть канал для передачи сообщений всем рабочим станциям заданного домена. Для этого необходимо задать имя по следующему образцу: \\ИмяДомена\mailslot\[Путь]ИмяКанала

Для передачи сообщений одновременно всем рабочим станциям сети первичного домена имя задается следующим образом: ь\\*\mailslot\[Путь]ИмяКанала

В качестве второго параметра функции CreateFile() передается константа GENERIC_WRITE

Эта константа определяет, что над открываемым каналом будет выполняться операция записи.

Напомним, что клиентский процесс может только посылать сообщения в канал Mailslotно не читать их оттуда. Чтение сообщений из канала Mailslot - задача для серверного процесса.

Третий параметр указан как FILE_SHARE_READ, и это тоже необходимо, так как сервер может читать сообщения, посылаемые одновременно несколькими клиентскими процессами.

Обратите также внимание на константу OPEN_EXISTING. Она используется потому, что функция CreateFile()открывает существующий канал, а не создает новый.

Запись сообщений в канал Mailslot

Запись сообщений в канал Mailslot выполняет клиентский процесс, вызывая для этого функцию WriteFile. С этой функцией мы уже имели дело. Например,

HANDLE hMailslot;

char szBuf[512];

DWORD cbWritten;

WriteFile (hMailslotszBuf, strlen(szBuf) + 1, &cbWritten, NULL);

К-во Просмотров: 159
Бесплатно скачать Контрольная работа: Почтовые каналы передачи данных Mailslot