Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Именованные каналы (Named Pipe)

48K
14 мая 2009 года
RF2
4 / / 14.05.2009
[CENTER]Использование именованных каналов[/CENTER]

[COLOR="Red"]Помогите доделать эту лабораторную работу на С++![/COLOR]
Задание:
Создать приложение, демонстрирующее обмен данными через именованные каналы — как локально, так и по сети. При этом выполнять асинхронную пересылку данных с применением перекрывающихся операций записи.
Программа создает именованный канал, в который любой подключившийся канал может записать данные. В программе имеется таймер, который периодически увеличивает счетчик и выводит его обновленное значение. Счетчик является признаком того, что главная нить приложения продолжает работать.
На форме приложения 1 (сервер) находятся три кнопки, соответствующие разным режимам пересылки данных, и надпись для вывода информации о текущем состоянии.

Схема формы серврной и клиентской части приложения:
[ATTACH]3531[/ATTACH] 15.2 кб

При нажатии каждой кнопки приложение пересылает блок из 200 байтов, который читается клиентским приложением по одному байту (чтобы замедлить процесс и таким образом подчеркнуть разницу между разными типами пересылки данных).
При установке флажка «соединение» клиент в течение 10 секунд ждет, пока сервер создаст канал. Узнав о том, что канал доступен, клиент открывает канал. Если открытие удачно, клиент включает таймер для чтения данных из канала и читает данные.
В каждом событии таймера из канала читается всего один байт. Конечно, данные читаются из канала чрезвычайно медленно, но это сделано для наглядной демонстрации отличий между синхронным и асинхронным режимом пересылки, а не для эффективного обмена данными между процессами.
Программа должна уметь поочередно обслуживать несколько клиентов.
Программа должна уметь одновременно передавать данные нескольким клиентам (вам придется создать несколько экземпляров канала).
48K
14 мая 2009 года
RF2
4 / / 14.05.2009
Вот то что я смог сделать:
[ATTACH]3525[/ATTACH] (45.1 кб)

Тут находится проект на С++Builder6 серверного и клиентского приложения (нет только асинхронной передачи данных без использования таймера).
[COLOR="Red"]Проблема такая: почему то клиент не хочет соединяться с сервером.[/COLOR]

Помогите найти ошибки в данном проекте или киньте свой код на С++ удовлетворяющему заданию лабораторной работы.

[COLOR="#ff0000"]Заранее благодарю тех, кто поможет![/COLOR]
48K
17 мая 2009 года
RF2
4 / / 14.05.2009
[CENTER][COLOR="Red"]Вот теория если кому нужно![/COLOR][/CENTER]

Именованные каналы (Named Pipes) - это объекты ядра, являющиеся средством межпроцессной коммуникации между сервером канала и одним или несколькими клиентами канала.

Сервером канала называется процесс, создающий именованный канал.

Клиентом канала называется процесс, подключающийся к созданному именованному каналу.

От других аналогичных объектов именованные каналы отличает гарантированная доставка сообщений, возможность асинхронного ввода/вывода, возможность коммуникации между процессами на разных компьютерах в локальной вычислительной сети и относительная простота использования.

По своему назначению они похожи на каналы операционной системы UNIX.

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

Базовым объектом для реализации именованных каналов служит объект "файл", поэтому для посылки и приема сообщений по именованным каналам используются те же самые функции Windows API, что и при работы с файлами (ReadFile, WriteFile).

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

Экземпляры одного канала имеют общее имя, указанное при создании, сервер назначает имя канала в соответствии с универсальными правилами именования (Universal Naming Convention, UNC), которые обеспечивают независимый от протоколов способ идентификации каналов в Windows-сетях.

Именованные каналы, также как и файлы, наследуют стандартную защиту объектов Windows, что позволяет разграничить участников коммуникации и обеспечить запрет несанкционированного доступа к каналу.

Создание именованных каналов возможно только в NT-системах, подключение к созданному каналу возможно как в NT-системах, так и в Win9x. Кроме того, API работы с каналами в Win9x не поддерживает асинхронных операций ввода/вывода.

Именованные каналы широко используются внутри самой системы. Например, взаимодействие менеджера сервисов с самими сервисами осуществляется через несколько именованных каналов. Для связи с сервисами RunAs, с планировщиком событий и с сервером локальной аутентификации также используются именованные каналы.

Именованные каналы являются наиболее простым способом организации связи между сервисами и пользовательскими приложениями, нуждающимися в такой связи.

Одним из полезных (и довольно уникальных) свойств именованного канала является возможность сервера заменять права своей учетной записи правами учетной записи клиента, соединившегося с каналом. Эта возможность служит преимущественно для ограничения прав сервера при выполнении операций доступа к различным объектам системы.

Для работы с именованными каналами Windows API предоставляет следующие функции:


CreateNamedPipe Создание именованного канала или нового экземпляра канала. Функция доступна только серверу.
ConnectNamedPipe или CreateFile Подключение к экземпляру именованного канала со стороны клиента. Функция доступна только клиенту.
WaitNamedPipe Ожидание клиентом появления свободного экземпляра именованного канала для подключения к нему.
ConnectNamedPipe Ожидание сервером подключения клиента к экземпляру именованного канала.
ReadFile, ReadFileEx Чтение данных из именованного канала. Функция доступна как клиенту, так и серверу.
WriteFile, WriteFileEx Запись данных в именованный канал. Функция доступна как клиенту, так и серверу.
PeekNamedPipe Чтение данных из именованного канала без удаления прочитанных данных из буфера канала. Функция доступна как клиенту, так и серверу.
TransactNamedPipe Запись и чтение из именованного канала одной операцией. Функция доступна как клиенту, так и серверу.
DisconnectNamedPipe Отсоединение сервера от экземпляра именованного канала.
GetNamedPipeInfo Получение информации об именованном канале.
GetNamedPipeHandleState Получение текущего режима работы именованного канала и количества созданных экземпляров канала.
SetNamedPipeHandleState Установка текущего режима работы именованного канала.
CloseHandle Закрытие дескриптора экземпляра именованного канала, освобождение связанных с объектом ресурсов.
FlushFileBuffers Сброс данных из кэша в буфер канала.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог