Дипломная работа: Разработка программы приема и передачи сообщений в локальной сети Microsoft
В именах почтовых слотов поддерживается псевдокаталоговая структура. Для лучшей организации почтовых слотов в их именах можно указывать пути в каталогах.
Функция CreateMailSlot также принимает в качестве параметров максимальный размер сообщений, время задержки для операций чтения и необязательную защитную структуру. Вместо значения задержки можно указать MAILSLOT_WAIT_FOREVER для блокирования операций чтения на слоте до получения сообщения без ограничения времени.
Если функция CreateMailSlot() завершается успешно, она возвращает ключ для нового слота. В случае ошибки возвращается значение INVALID_HANDLE_VALUE, для получения кода ошибки можно воспользоваться функцией GetLastError().
Создание типичного почтового слота может быть реализовано следующим образом:
Hslot: = CreateMailSlot(«\\\\.\mailslot\\MySlot\MsgSlot»,
300,
MAILSLOT_WAIT_FOREVER,
NULL);
If hSlot=INVALID_HANDLE_VALUE then
Begin
ShowMessage (‘CreateMailSlot Error’, GetLastError());
Halt(0);
End;
Для изменения времени задержки операций чтения после создания слота используется функция SetMailSlot(). Кроме того, для получения такой информации о слоте, как максимальный размер сообщения, размер следующего сообщения в очереди и количество сообщений в очереди, можно использовать функцию GetMailSlotInfo().
Чтение из почтового слота
Для чтения из слота используется функция ReadFile(), которая завершает свою работу после получения сообщения, независимо от того, сколько байт необходимо прочитать.
Кроме того, с помощью функции GetMailSlotInfo() можно узнать количество сообщений, ожидающих в очереди слота, и размер следующего сообщения.
Запись в почтовый слот
Для записи сообщения в слот необходимо сначала открыть его ключ с помощью функции CreateFile(), а затем воспользоваться функцией WriteFile() для посылки сообщения. Ключ слота закрывается функцией CloseHandle().
При вызове CreateFile() необходимо указать имя слота, которому посылается сообщение. Указанное имя допускает циркулярную рассылку данных всем слотам с такими же именами на компьютерах домена.
Для локального компьютера имя слота выглядит следующим образом:
\\.\mailslot\[путь] имя
Для удалённого компьютера имя слота имеет следующий вид:
\\имя_удалённого_компьютера\mailslot\[путь] имя
Для рассылки сообщений всем слотам с одинаковыми именами на компьютерах домена необходимо указать следующее имя:
\\имя_домена\mailslot\[путь] имя
Для рассылки всем компьютерам в домене более высокого иерархического уровня используется следующее имя:
\\*\mailslot\[путь] имя
Кроме того, при вызове функции CreateFile() можно выбрать режим GENERIC_WRITE, режим совместного использования FILE_SHARE_READ или режим создания OPEN_EXISTING.