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. Затем строка передается в качестве параметра при создании клиентского процесса. Из клиентского процесса он передается конструктору AnonymousPipeClientStream в качестве параметра pipeHandleAsString
.
В 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) |
Настраивает способ ожидания задач, возвращаемых из асинхронного удаления. |