Как работать с поименованными каналами под Win95-NT в сети
Реальность из дистрибутива Windows ME - Удаленный доступ к домашней сети.
сервер:
StrPCopy(buff, Edit1.Text);
fPipeHandle := CreateNamedPipe(buff,
Pipe_Access_Duplex or File_Flag_Overlapped,
Pipe_Type_Message or Pipe_ReadMode_Byte or Pipe_Wait,
5, $400, $400, 235, nil);
клиент:
StrPCopy(buff,Edit1.Text);
fFileHandle:=CreateFile(buff,
Generic_Read or Generic_Write,
File_Share_Read or File_Share_Write,
nil,
Open_Existing,
File_Attribute_Normal or File_Flag_Overlapped or Security_Anonymous,
0);
if fFileHandle <> Invalid_Handle_Value thenbegin
...
Классическая проблема программирования под Windows!
В этом коде мы работаем с именованными трубами (named pipes) под Windows 95/NT. Именованные трубы - это способ установить общение между процессами или потоками в одном компьютере или через сеть.
Код сервера
Сервер создает именованную трубу с помощью функции CreateNamedPipe, которая принимает несколько параметров:
buff: Имя трубы.
Pipe_Access_Duplex or File_Flag_Overlapped: Это specifies, что труба должна быть able to handle both read and write operations, и она должна поддерживать overlapped I/O (то есть асинхронный ввод-вывод).
Pipe_Type_Message or Pipe_ReadMode_Byte or Pipe_Wait: Это sets the pipe type to message-based, allows byte-level reading, and enables waiting for incoming data.
5: Максимальное количество outstanding operations (например, чтения или записи), которые могут быть выполнены на трубе в любое время.
$400 и $400: Максимальный размер буфера для входящей и исходящей данных соответственно.
235: Значение тайаута по умолчанию в миллисекундах.
nil: Указатель на структуру SECURITY_ATTRIBUTES, которая не используется в этом случае.
Затем сервер использует функцию StrPCopy для копирования текста из редактора (Edit1.Text) в буфер.
Код клиента
Клиент создает файловый handle с помощью функции CreateFile, которая принимает несколько параметров:
buff: Имя трубы (которое является тем же, что и имя трубы сервера).
Generic_Read or Generic_Write: Это specifies, что файловый handle должен allow both read and write operations.
File_Share_Read or File_Share_Write: Это sets the sharing mode for the file, allowing multiple processes to read or write to it simultaneously.
nil: Указатель на структуру SECURITY_ATTRIBUTES, которая не используется в этом случае.
Open_Existing: Открывает существующий файл (то есть именованную трубу).
File_Attribute_Normal or File_Flag_Overlapped or Security_Anonymous: Это sets various attributes for the file handle, including normal file attributes, overlapped I/O support, and anonymous security.
Если файловый handle успешно создан, код выполняет некоторые операции (не показанные в этом фрагменте).
Как использовать именованные трубы под Windows 95/NT
Чтобы работать с именованными трубами под Windows 95/NT:
Создайте именованную трубу на сервере с помощью CreateNamedPipe.
Подключитесь к именованной трубе от клиента с помощью CreateFile с тем же именем трубы.
Используйте overlapped I/O (например, ReadFile и WriteFile) для отправки и приема данных между процессами.
Некоторые важные заметки:
Именованные трубы являются уникальными для процесса или потока, поэтому каждый процесс или поток должен создать свой собственный именованный труб.
Именованные трубы могут использоваться для двустороннего общения, но вам нужно использовать overlapped I/O для достижения этого.
Функция CreateNamedPipe доступна только в Windows NT 3.51 и более поздних версиях.
Надеюсь, это поможет! Пожалуйста, дайте мне знать, если у вас есть какие-либо дальнейшие вопросы.
В статье описывается работа с поименованными каналами в сети под операционной системой Windows 95-NT, включая создание и использование сервера и клиента для удаленного доступа к домашней сети.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.