AnonymousPipeClientStream Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет клиенту анонимный поток канала, который поддерживает синхронные и асинхронные операции чтения и записи (без поддержки отмены на платформах Windows).
public ref class AnonymousPipeClientStream sealed : System::IO::Pipes::PipeStream
public sealed class AnonymousPipeClientStream : System.IO.Pipes.PipeStream
type AnonymousPipeClientStream = class
inherit PipeStream
Public NotInheritable Class AnonymousPipeClientStream
Inherits PipeStream
- Наследование
- Наследование
Примеры
В следующем примере строка из родительского процесса отправляется дочернему процессу с помощью анонимных каналов. В этом примере создается AnonymousPipeServerStream объект в родительском процессе со значением PipeDirectionOut. Он также создает AnonymousPipeClientStream объект в дочернем процессе со значением PipeDirectionIn. Теперь родительский процесс отправляет предоставленную пользователем строку в дочерний процесс. Строка отображается в консоли.
Этот пример предназначен для клиентского процесса, который запускается серверным процессом. Присвойте полученному исполняемому файлу имя из клиентского кода pipeClient.exe
и скопируйте его в тот же каталог, что и исполняемый файл сервера при выполнении этого примера. Полный пример кода, включая код для клиента канала и сервера, см. в разделе Практическое руководство. Использование анонимных каналов для локального межпроцессного взаимодействия.
//<snippet01>
#using <System.Core.dll>
using namespace System;
using namespace System::IO;
using namespace System::IO::Pipes;
ref class PipeClient
{
public:
static void Main(array<String^>^ args)
{
if (args->Length > 1)
{
PipeStream^ pipeClient = gcnew AnonymousPipeClientStream(PipeDirection::In, args[1]);
Console::WriteLine("[CLIENT] Current TransmissionMode: {0}.",
pipeClient->TransmissionMode);
StreamReader^ sr = gcnew StreamReader(pipeClient);
// Display the read text to the console
String^ temp;
// Wait for 'sync message' from the server.
do
{
Console::WriteLine("[CLIENT] Wait for sync...");
temp = sr->ReadLine();
}
while (!temp->StartsWith("SYNC"));
// Read the server data and echo to the console.
while ((temp = sr->ReadLine()) != nullptr)
{
Console::WriteLine("[CLIENT] Echo: " + temp);
}
sr->Close();
pipeClient->Close();
}
Console::Write("[CLIENT] Press Enter to continue...");
Console::ReadLine();
}
};
int main()
{
array<String^>^ args = Environment::GetCommandLineArgs();
PipeClient::Main(args);
}
//</snippet01>
//<snippet01>
using System;
using System.IO;
using System.IO.Pipes;
class PipeClient
{
static void Main(string[] args)
{
if (args.Length > 0)
{
using (PipeStream pipeClient =
new AnonymousPipeClientStream(PipeDirection.In, args[0]))
{
Console.WriteLine("[CLIENT] Current TransmissionMode: {0}.",
pipeClient.TransmissionMode);
using (StreamReader sr = new StreamReader(pipeClient))
{
// Display the read text to the console
string temp;
// Wait for 'sync message' from the server.
do
{
Console.WriteLine("[CLIENT] Wait for sync...");
temp = sr.ReadLine();
}
while (!temp.StartsWith("SYNC"));
// Read the server data and echo to the console.
while ((temp = sr.ReadLine()) != null)
{
Console.WriteLine("[CLIENT] Echo: " + temp);
}
}
}
}
Console.Write("[CLIENT] Press Enter to continue...");
Console.ReadLine();
}
}
//</snippet01>
'<snippet01>
Imports System.IO
Imports System.IO.Pipes
Class PipeClient
Shared Sub Main(args() as String)
If args.Length > 0 Then
Using pipeClient As New AnonymousPipeClientStream(PipeDirection.In, args(0))
Console.WriteLine("[CLIENT] Current TransmissionMode: {0}.", _
pipeClient.TransmissionMode)
Using sr As New StreamReader(pipeClient)
' Display the read text to the console
Dim temp As String
' Wait for 'sync message' from the server.
Do
Console.WriteLine("[CLIENT] Wait for sync...")
temp = sr.ReadLine()
Loop While temp.StartsWith("SYNC") = False
' Read the server data and echo to the console.
temp = sr.ReadLine()
While Not temp = Nothing
Console.WriteLine("[CLIENT] Echo: " + temp)
temp = sr.ReadLine()
End While
End Using
End Using
End If
Console.Write("[CLIENT] Press Enter to continue...")
Console.ReadLine()
End Sub
End Class
'</snippet01>
Комментарии
Анонимные каналы помогают обеспечить безопасный и безопасный межпроцессный обмен данными между дочерними и родительскими процессами. Класс AnonymousPipeClientStream позволяет дочернему процессу подключаться к родительскому процессу и обмениваться информацией с ним.
Анонимные каналы — это неименованные односторонние каналы, которые обычно передают данные между родительским и дочерним процессами. Анонимные каналы всегда являются локальными; они не могут использоваться по сети. Значение PipeDirectionInOut не поддерживается, так как анонимные каналы определены как односторонние.
Анонимные каналы не поддерживают PipeTransmissionMode.Message режим чтения.
Клиентская часть анонимного канала должна быть создана из дескриптора канала, предоставленного сервером путем вызова GetClientHandleAsString метода . Затем строка передается в качестве параметра при создании клиентского процесса. Из клиентского процесса он передается конструктору в AnonymousPipeClientStreampipeHandleAsString
качестве параметра .
В Windows асинхронные (перекрывающиеся) операции чтения и записи не поддерживаются анонимными каналами (см. раздел Операции анонимных каналов). Класс AnonymousPipeClientStream по-прежнему будет планировать работу в пуле потоков на платформах Windows, чтобы асинхронные Stream операции работали, но отмена этих операций не поддерживается.
Конструкторы
AnonymousPipeClientStream(PipeDirection, SafePipeHandle) |
Инициализирует новый экземпляр класса AnonymousPipeClientStream из указанного дескриптора. |
AnonymousPipeClientStream(PipeDirection, String) |
Инициализирует новый экземпляр класса AnonymousPipeClientStream с использованием указанного направления канала и строкового представления дескриптора канала. |
AnonymousPipeClientStream(String) |
Инициализирует новый экземпляр класса AnonymousPipeClientStream с использованием указанного дескриптора канала в строковом представлении. |
Свойства
CanRead |
Возвращает значение, указывающее, поддерживает ли текущий поток операции чтения. (Унаследовано от PipeStream) |
CanSeek |
Возвращает значение, указывающее, поддерживает ли текущий поток операции поиска. (Унаследовано от PipeStream) |
CanTimeout |
Возвращает значение, которое показывает, может ли для данного потока истечь время ожидания. (Унаследовано от Stream) |
CanWrite |
Возвращает значение, указывающее, поддерживает ли текущий поток операции записи. (Унаследовано от PipeStream) |
InBufferSize |
Получает размер (в байтах) входящего буфера для канала. (Унаследовано от PipeStream) |
IsAsync |
Возвращает значение, показывающее, как был открыт объект PipeStream — синхронно или асинхронно. (Унаследовано от PipeStream) |
IsConnected |
Возвращает или задает значение, указывающее, подключен ли объект PipeStream. (Унаследовано от PipeStream) |
IsHandleExposed |
Возвращает значение, указывающее, предоставлен ли дескриптор в объект PipeStream. (Унаследовано от PipeStream) |
IsMessageComplete |
Возвращает значение, указывающее, содержатся ли еще данные в сообщении, возвращенном из последней операции чтения. (Унаследовано от PipeStream) |
Length |
Получает длину потока в байтах. (Унаследовано от PipeStream) |
OutBufferSize |
Получает размер (в байтах) исходящего буфера для канала. (Унаследовано от PipeStream) |
Position |
Возвращает или задает текущую позицию в текущем потоке. (Унаследовано от PipeStream) |
ReadMode |
Задает режим чтения для объекта AnonymousPipeClientStream. |
ReadTimeout |
Возвращает или задает значение в миллисекундах, определяющее период времени, отведенного потоку на выполнение операции чтения. (Унаследовано от Stream) |
SafePipeHandle |
Получает безопасный дескриптор для локального конца канала, инкапсулируемого текущим объектом PipeStream. (Унаследовано от PipeStream) |
TransmissionMode |
Возвращает режим передачи, поддерживаемый текущим каналом. |
WriteTimeout |
Возвращает или задает значение в миллисекундах, определяющее период времени, отведенного потоку на выполнение операции записи. (Унаследовано от Stream) |
Методы
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Начинает операцию асинхронного чтения. (Унаследовано от PipeStream) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Начинает операцию асинхронной записи. (Унаследовано от PipeStream) |
CheckPipePropertyOperations() |
Проверяет, допускает ли состояние канала получение или установку свойств. (Унаследовано от PipeStream) |
CheckReadOperations() |
Проверяет, находится ли канал в подключенном состоянии для выполнения операций чтения. (Унаследовано от PipeStream) |
CheckWriteOperations() |
Проверяет, находится ли канал в подключенном состоянии для выполнения операций записи. (Унаследовано от PipeStream) |
Close() |
Закрывает текущий поток и отключает все ресурсы (например, сокеты и файловые дескрипторы), связанные с текущим потоком. Вместо вызова данного метода, убедитесь в том, что поток надлежащим образом ликвидирован. (Унаследовано от Stream) |
CopyTo(Stream) |
Считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyTo(Stream, Int32) |
Считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyToAsync(Stream) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyToAsync(Stream, CancellationToken) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный токен отмены. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyToAsync(Stream, Int32) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и токен отмены. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CreateObjRef(Type) |
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
CreateWaitHandle() |
Устаревшие..
Устаревшие..
Устаревшие..
Выделяет объект WaitHandle. (Унаследовано от Stream) |
Dispose() |
Освобождает все ресурсы, занятые модулем Stream. (Унаследовано от Stream) |
Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые классом PipeStream (при необходимости освобождает и управляемые ресурсы). (Унаследовано от PipeStream) |
DisposeAsync() |
Асинхронно освобождает неуправляемые ресурсы, используемые классом Stream. (Унаследовано от Stream) |
EndRead(IAsyncResult) |
Завершает отложенный запрос асинхронного чтения. (Унаследовано от PipeStream) |
EndWrite(IAsyncResult) |
Завершает отложенный запрос асинхронной записи. (Унаследовано от PipeStream) |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
Finalize() |
Освобождает неуправляемые ресурсы и выполняет другие операции очистки, прежде чем память, занимаемая данным экземпляром AnonymousPipeClientStream, будет освобождена в процессе сборки мусора. |
Flush() |
Очищает буфер для текущего потока и вызывает запись всех буферизованных данных в соответствующее устройство. (Унаследовано от PipeStream) |
FlushAsync() |
Асинхронно очищает все буферы для этого потока и вызывает запись всех буферизованных данных в базовое устройство. (Унаследовано от Stream) |
FlushAsync(CancellationToken) |
Асинхронно очищает буфер для текущего потока и вызывает запись всех буферизованных данных в соответствующее устройство. (Унаследовано от PipeStream) |
GetAccessControl() |
Возвращает объект PipeSecurity, который инкапсулирует записи списка управления доступом (ACL) для канала, описываемого текущим объектом PipeStream. (Унаследовано от PipeStream) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetLifetimeService() |
Устаревшие..
Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
InitializeHandle(SafePipeHandle, Boolean, Boolean) |
Инициализирует объект PipeStream из указанного объекта SafePipeHandle. (Унаследовано от PipeStream) |
InitializeLifetimeService() |
Устаревшие..
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
MemberwiseClone(Boolean) |
Создает неполную копию текущего объекта MarshalByRefObject. (Унаследовано от MarshalByRefObject) |
ObjectInvariant() |
Устаревшие..
Обеспечивает поддержку для Contract. (Унаследовано от Stream) |
Read(Byte[], Int32, Int32) |
Считывает блок байтов из потока и записывает данные в указанный буфер, начиная с заданной позиции с учетом указанной длины. (Унаследовано от PipeStream) |
Read(Span<Byte>) |
Считывает последовательность байтов из текущего потока, записывает их в массив байтов и перемещает позицию внутри потока на число считанных байтов. (Унаследовано от PipeStream) |
ReadAsync(Byte[], Int32, Int32) |
Асинхронно считывает последовательность байтов из текущего потока и перемещает позицию внутри потока на число считанных байтов. (Унаследовано от Stream) |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Асинхронно считывает последовательность байтов из текущего потока в массив байтов, начиная с указанной позиции, с учетом указанного числа байтов, перемещает позицию в потоке на число считанных байтов и отслеживает запросы отмены. (Унаследовано от PipeStream) |
ReadAsync(Memory<Byte>, CancellationToken) |
Асинхронно считывает последовательность байтов из текущего потока, записывает их в диапазон памяти байтов, перемещает позицию в потоке на число считанных байтов и отслеживает запросы отмены. (Унаследовано от PipeStream) |
ReadAtLeast(Span<Byte>, Int32, Boolean) |
Считывает по крайней мере минимальное количество байтов из текущего потока и перемещает позицию в потоке на число прочитанных байтов. (Унаследовано от Stream) |
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
Асинхронно считывает по крайней мере минимальное количество байтов из текущего потока, перемещает позицию в потоке на число прочитанных байтов и отслеживает запросы отмены. (Унаследовано от Stream) |
ReadByte() |
Считывает байт из канала. (Унаследовано от PipeStream) |
ReadExactly(Byte[], Int32, Int32) |
Считывает |
ReadExactly(Span<Byte>) |
Считывает байты из текущего потока и перемещает позицию в потоке |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Асинхронно считывает |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Асинхронно считывает байты из текущего потока, перемещает позицию в потоке |
Seek(Int64, SeekOrigin) |
Устанавливает заданное значение в качестве текущей позиции в текущем потоке. (Унаследовано от PipeStream) |
SetAccessControl(PipeSecurity) |
Применяет записи списка управления доступом (ACL), заданные объектом PipeSecurity, к каналу, заданному текущим объектом PipeStream. (Унаследовано от PipeStream) |
SetLength(Int64) |
Задает указанное значение для длины текущего потока. (Унаследовано от PipeStream) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
WaitForPipeDrain() |
Ожидает завершения считывания всех отправленных байтов на противоположном конце канала. (Унаследовано от PipeStream) |
Write(Byte[], Int32, Int32) |
Записывает в текущий поток блок байтов, используя данные из буфера. (Унаследовано от PipeStream) |
Write(ReadOnlySpan<Byte>) |
Записывает последовательность байтов в текущий поток и перемещает текущую позицию внутри потока на число записанных байтов. (Унаследовано от PipeStream) |
WriteAsync(Byte[], Int32, Int32) |
Асинхронно записывает последовательность байтов в текущий поток и перемещает текущую позицию внутри потока на число записанных байтов. (Унаследовано от Stream) |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Асинхронно записывает указанное число байтов из текущего потока в массив байтов, начиная с указанной позиции, перемещает позицию в потоке на число считанных байтов и отслеживает запросы отмены. (Унаследовано от PipeStream) |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены. (Унаследовано от PipeStream) |
WriteByte(Byte) |
Выполняет запись байта в текущий поток. (Унаследовано от PipeStream) |
Методы расширения
CopyToAsync(Stream, PipeWriter, CancellationToken) |
Асинхронно считывает байты из Stream и записывает их в указанный PipeWriter, используя токен отмены. |
GetAccessControl(PipeStream) |
Возвращает сведения о безопасности для потока канала. |
SetAccessControl(PipeStream, PipeSecurity) |
Изменяет атрибуты безопасности для существующего потока канала. |
ConfigureAwait(IAsyncDisposable, Boolean) |
Настраивает способ выполнения ожиданий для задач, возвращаемых из асинхронного высвобождаемого объекта. |
Применяется к
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по