Реферат по предмету "Информатика, программирование"


Почтовые каналы передачи данных Mailslot

Почтовые каналы передачиданных Mailslot

Способыорганизации передачи данных
Рассмотримпростой способ организации передачи данных между различными процессами,основанный на использовании дейтаграммных каналов Mailslot.
КаналыMailslot позволяют выполнять одностороннюю передачу данных от одного илинескольких клиентов к одному или нескольким серверам.
Главнаяособенность каналов Mailslot заключается в том, что они, в отличие от другихсредств, рассмотренных нами, позволяют передавать данные в широковещательномрежиме.
Это означает,что на компьютере или в сети могут работать несколько серверных процессов,способных получать сообщения через каналы Mailslot.
При этом одинклиентский процесс может посылать сообщения сразу всем этим сервернымпроцессам.
С помощьюканалов Pipe вы не сможете передавать данные в широковещательном режиме, таккак только два процесса могут создать канал типа Pipe.
MailSlot — этофайл, находящийся в памяти, доступ к которому осуществляется стандартнымифайловыми функциями Win32. Данные в Mailslot могут быть в любой форме, но общийразмер не может быть больше 64K.
Различают два типа процессов: MailSlot-сервер иMailSlot-клиент.
MailSlot-cервер- является процессом, который создает и обладает MailSlot. Когда сервер создаетMailSlot, он получает хэндл.
Этот хэндл должен использоваться, когда процесс читаетсообщения от MailSlot. Только процесс, который создает MailSlot или получаетхэндл некоторым другим механизмом, может прочитать данные из MailSlot. ВсеMailSlot локальные на процессе, который создает их.
Процесс не может создать дистанционный MailSlot.
MailSlot-клиент — является процессом, который пишет сообщение в MailSlot. Любой процесс, которыйимеет имя MailSlot может записать в него информацию
Такимобразом, MailSlot представляет собой простой и однонаправленный интерфейсвзаимодействия между процессами. Процесс-сервер может завести почтовый ящик идать ему имя, глобальное в сети. Любой клиент может с помощью операций работы сфайлами отправить данные в этот ящик. Сервер, по мере необходимости, можетчитать переданные ему данные. Кроме этого, возможно широковещательная передачаинформации клиентом всем серверам домена.
Рассмотримнаиболее важные функции программного интерфейса Windows, предназначенные дляработы с каналами MailSlot, которые сведем в таблицу 1.
Таблица 1
Функции дляработы с каналами MailSlot№ п/п Функция Назначение CreateMailslot Создание канала MailSlot CloseHandle Закрытие хэндла канала GetMailslot Определение текущего состояния канала Mailslot. SetMailslot Изменение времени ожидания для канала Mailslot после его создания Созданиеканала Mailslot
КаналMailslot создается серверным процессом с помощью специально предназначенной дляэтого функции CreateMailslot().
Послесоздания серверный процесс получает хэндл канала Mailslot. Пользуясь этим хэндло,сервер может читать сообщения, посылаемые в канал клиентскими процессами.
Однако серверне может выполнять над каналом Mailslot операцию записи, так как этот каналпредназначен только для односторонней передачи данных — от клиента к серверу.
Синтаксисфункции следующий
HANDLE CreateMailslot (LPCTSTR lpName,DWORD nMaxMsgSize, DWORD lReadTimeout, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Параметры:
lpName –указатель на строку имени канала Mailslot.
nMaxMsgSize – максимальный размер сообщения.
lReadTimeout – время ожидания длячтения.
lpSecurityAttributes– указательна атрибуты защиты
Возвращаемоезначение. При успешном выполнении – хэндл созданного канала Mailslot, приошибке – INVALID_HANDLE_VALUEКод ошибки уточняется при вызове функции GetLastError()
Через первый параметр lpName передаются функции CreateMailslot()указательна строку символов с именем канала Mailslot. Эта строка имеет следующий вид: \\.\mailslot\[Путь]ИмяКанала
В этом имени путь является необязательной компонентой. Тем не менее,вы можете указать его аналогично тому, как это делается для файлов. Что жекасается имени канала Mailslot, то оно задается аналогично имени канала Pipes.
Второй параметр 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);
В качестве первого параметра этой функции необходимо передатьхэндл канала Mailslotполученный от функции CreateFile().
Второй параметр определяет адресбуфера с сообщением, третий — размер сообщения. В нашем случае сообщенияпередаются в виде текстовой строки, закрытой двоичным нулем, поэтому дляопределения длины сообщения была использована функция strlen. Чтение сообщений изканала Mailslot
Серверныйпроцесс может читать сообщения из созданного им канала Mailslot при помощифункции ReadFile(), как это показано ниже:
HANDLE hMailslot char szBuf[512]; DWORD cbRead;
ReadFile (hMailslotszBuf, 512,&cbRead, NULL);

Через первый параметр функции ReadFile передается хэндл созданногоранее канала Mailslot, полученный от функции CreateMailslot(). Второй и третийпараметры задают, соответственно, адрес буфера для сообщения и его размер.
Заметим, чтоперед выполнением операции чтения следует проверить состояние канала Mailslot.
Если в немнет сообщений, то функцию ReadFile()вызывать не следует. Для проверки состоянияканала вы должны воспользоваться функцией GetMailslotInfo(). Определениесостояния канала Mailslot
Серверныйпроцесс может по его хэндлу с помощью функции GetMailslotInfo(), синтаксискоторой следующий
BOOL GetMailslotInfo (HANDLE hMailslot,LPDWORD lpMaxMessageSize, LPDWORD lpNextSize, LPDWORD lpMessageCount, LPDWORD lpReadTimeout)
Параметры:
hMailslot –хэндл канала Mailslot.
lpMaxMessageSize – адрес максимальногоразмера сообщения.
lpNextSize – адрес размера следующегосообщения.
lpMessageCount – адрес количествасообщений.
lpReadTimeout – адрес времени ожидания.
Возвращаемоезначение. При успешном выполнении – TRUE, при ошибке — FALSE.
Через параметр hMailslot функции передается идентификатор каналаMailslot, состояние которого необходимо определить.
Остальныепараметры задаются как указатели на переменные типа DWORD, в которые будутзаписаны параметры состояния канала Mailslot.
В переменную,адрес которой передается через параметр lpMaxMessageSize, после возвращения изфункции GetMailslotInfo() будет записан максимальный размер сообщения.
Можноиспользовать это значение для динамического получения буфера памяти, в которыйэто сообщение будет прочитано функцией ReadFile()
В переменную,адрес которой указан через параметр lpNextSize, записывается размер следующегосообщения, если оно есть в канале. Если же в канале больше нет сообщений, в этупеременную будет записана константа MAILSLOT_NO_MESSAGE
С помощьюпараметра lpMessageCount можно определить количество сообщений, записанных вканал клиентскими процессами.
Если этоколичество равно нулю, то не следует вызывать функцию ReadFile()для чтениянесуществующего сообщения.
И, наконец, впеременную, адрес которой задается в параметре lpReadTimeout, записываетсятекущее время ожидания, установленное для канала (в миллисекундах).
Если не нужнався информация, которую можно получить с помощью функции GetMailslotInfo(),некоторые из ее параметров (кроме, разумеется, первого) можно указать как NULL.
Пример 2.Демонстрация использования функции GetMailslotInfo():
BOOL fReturnCode; DWORD cbMessages;DWORDcbMsgNumber;
fReturnCode = GetMailslotInfo(hMailslot,NULL, &cbMessages, &cbMsgNumber, NULL);
Изменениесостояния канала Mailslot
С помощьюфункции SetMailslotInfo() серверный процесс может изменить время ожидания дляканала Mailslot уже после его создания.
Синтаксисфункции SetMailslotInfo() следующий:
BOOL SetMailslotInfo (HANDLE hMailslot,DWORD lpReadTimeout)
Параметры:
hMailslot –хэндл канала Mailslot.
lpReadTimeout – адрес времени ожидания.
Возвращаемоезначение. При успешном выполнении – TRUE, при ошибке — FALSE.
Через параметр hMailslot функции SetMailslot Info() передаетсяидентификатор канала Mailslot, для которого нужно изменить время ожидания.
Новоезначение времени ожидания в миллисекундах задается через параметр dwReadTimeout.Также можно указать здесь константы 0 или MAILSLOT_WAIT_FOREVER.
В первомслучае функции, работающие с каналом, вернут управление немедленно, во втором — будут находиться в состоянии ожидания до тех пор, пока не завершитсявыполняемая операция.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Защита от несанкционированной аудиозаписи Защита компьютерной информации Криптографические
Реферат Бухгалтерский баланс как информационная модель оценки фактического положения хозяйствующих субъектов
Реферат Бюджетний дефіцит: причини виникнення, наслідки, методи управління
Реферат Региональные системы управления социальной работой
Реферат Права и обязанности аудиторов и аудиторских организаций. Кодекс этики аудиторов РФ содержание,
Реферат Национальное богатство
Реферат Информационная система для школы
Реферат Универсальный этикет делового общения
Реферат Обязательные резервы коммерческих банков - объективная необходимость или субъективный подход
Реферат 19. 10. 2011    С. Катырин: тпп РФ представит принципиальную позицию в отношении Стратегии 2020
Реферат Курс лекций по Деньгам, кредитам, банки
Реферат Condorcet
Реферат Русский язык и культура речи 5
Реферат Соціологічне вчення Спенсера
Реферат Банковский кредит, его суть и общие основы развития