Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prakt-Storozhok.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.98 Mб
Скачать
    1. Пример создания сервера именованных каналов, работающего в блокирующем режиме

VAR

PipeHandle: THANDLE;

BytesRead: DWORD;

buffer: Array [1..80]of char;

begin

PipeHandle := CreateNamedPipe('\\.\Pipe\Jim', PIPE_ACCESS_DUPLEX,

PIPE_TYPE_BYTE or PIPE_READMODE_BYTE, 1, 0, 0, 1000, Nil);

if PipeHandle=INVALID_HANDLE_VALUE then

begin

ShowMessageFmt('Ошибка %d при создании именованного канала',

[GetLastError]);

exit;

end;

ShowMessage('Сервер работает');

if ConnectNamedPipe(PipeHandle, Nil)=False then

begin

ShowMessageFmt('Ошибка %d при соединении по именован. каналу',

[GetLastError]);

CloseHandle(PipeHandle);

exit;

end;

if ReadFile(PipeHandle, buffer, sizeof(buffer), BytesRead, nil)=False then

begin

ShowMessageFmt('Ошибка %d при чтении данных', [GetLastError]);

CloseHandle(PipeHandle);

exit; end;

ShowMessage(buffer);

if DisconnectNamedPipe(PipeHandle) = False then

begin

ShowMessageFmt('Ошибка %d при закрытии канала', [GetLastError]);

exit; end;

CloseHandle(PipeHandle);

end;

    1. Пример создания клиента именованных каналов

CONST

PIPE_NAME='\\.\Pipe\Jim';

VAR

PipeHandle: THANDLE;

BytesWritten: DWORD;

begin

if WaitNamedPipe(PIPE_NAME, NMPWAIT_WAIT_FOREVER)=False then

begin

ShowMessageFmt('Функция WaitNamedPipe завершена с ошибкой %d', [GetLastError]);

exit; end;

// Открытие экземпляра именованного канала

PipeHandle := CreateFile(PIPE_NAME,GENERIC_READ or GENERIC_WRITE, 0, Nil, OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL, 0);

if PipeHandle=INVALID_HANDLE_VALUE then

begin

ShowMessageFmt('Функция CreateFile завершена с ошибкой %d', [GetLastError]);

exit; end;

if WriteFile(PipeHandle, 'This is a test', 14, BytesWritten, Nil)=False then

begin

ShowMessageFmt('WriteFile failed with error %d', [GetLastError]);

CloseHandle(PipeHandle);

exit;

end;

ShowMessageFmt('Передано %d байт', [BytesWritten]);

CloseHandle(PipeHandle);

end;.

  1. Задание по практическому занятию

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

    1. Создание серверного приложения,

работающего в блокирующем режиме

Серверное приложение (рис. 1) выполняет следующие функции.

  1. Создание экземпляра именованного канала CreateNamedPipe.

  2. Прослушивание клиентских соединений ConnectNamedPipe.

  3. Получение и отправка данных WriteFile и ReadFile.

  4. Закрытие описателя экземпляра именованного канала CloseHandle.

    1. Создание клиентского приложения,

работающего в блокирующем режиме

Клиентское приложение (рис. 2) выполняет следующие функции.

Рис. 1 Рис. 2

  1. Проверка наличия свободного экземпляра канала с помощью функции WaitNamedPipe.

  2. Установление соединения с помощью функции CreateFile.

  3. Отправка и получение данных с помощью функций WriteFile и ReadFile.

  4. Завершение соединения с помощью функции CloseHandle.

2.3. Расширение возможностей именованных каналов

для передачи пакетов различной длины

К разработанному приложению добавьте следующие функции.

  1. Передача на сервер любого вводимого сообщения.

  2. Подтверждение приема сообщения, передаваемого от сервера к клиенту.

В результате клиентское приложение должно иметь вид, изображенный на рис. 3. Серверное приложение изображено на рис. 4.

Рис. 3. Клиентское приложение Рис. 4. Серверное приложение

ПРИМЕЧАНИЕ

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

  1. Очистка буфера – ZeroMemory(@buffer, sizeof(buffer)). Где buffer – переменная типа Array [……] of Char.

  2. Копирование строки в стиле Pascal в строку с нулевым символом на конце – StrCopy(@buffer, PChar(Edit1.Text)).

ЛИТЕРАТУРА

Джонс Э., Оланд Дж. Программирование в сетях MicrosoftWindows. Мастер-класс /Пер. с англ. М., Издательско-торговый дом «Русская редакция», 2002. 608 с.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Опишите алгоритм работы серверного приложения для работы с именованными каналами Windows.

2. Опишите алгоритм работы клиентского приложения для работы с именованными каналами Windows.

3. Назовите достоинства и недостатки механизма именованных каналалов Windows.

4. Сравните возможности механизма именованных каналов и почтовых ящиков.

Занятие 5. Работа с именованными каналами WINDOWS в неблокирующем режиме

Именованные каналы имеют клиент-серверную архитектуру, при которой данные передаются в одном или двух направлениях. Основное отличие сервера от клиента – только сервер может создавать именованный канал и принять соединение с клиентом.

Цель работы: получить практику в программировании именованных каналов и освоить приемы работы с именованными программными каналами Windows в неблокирующем режиме.

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