Sdílet prostřednictvím


AnonymousPipeServerStream Třída

Definice

Zveřejňuje datový proud kolem anonymního kanálu, který podporuje synchronní i asynchronní operace čtení a zápisu.

public ref class AnonymousPipeServerStream sealed : System::IO::Pipes::PipeStream
public sealed class AnonymousPipeServerStream : System.IO.Pipes.PipeStream
type AnonymousPipeServerStream = class
    inherit PipeStream
Public NotInheritable Class AnonymousPipeServerStream
Inherits PipeStream
Dědičnost
AnonymousPipeServerStream
Dědičnost
AnonymousPipeServerStream

Příklady

Následující příklad odešle řetězec z nadřazeného procesu do podřízeného procesu pomocí anonymních kanálů. Tento příklad vytvoří objekt AnonymousPipeServerStream v nadřazený proces s PipeDirection hodnotou PipeDirection.Out. Vytvoří také objekt AnonymousPipeClientStream v podřízeného procesu s PipeDirection hodnotou PipeDirection.In. Nadřazený proces pak odešle do podřízeného procesu řetězec zadaný uživatelem. Řetězec se zobrazí v konzole.

Tento příklad je určený pro proces serveru, který používá třídu AnonymousPipeServerStream. Celý příklad kódu, včetně kódu pro klienta kanálu i serveru, najdete v tématu Postupy: Použití anonymních kanálů pro místní komunikaci meziprocesy.

//<snippet01>
#using <System.dll>
#using <System.Core.dll>

using namespace System;
using namespace System::IO;
using namespace System::IO::Pipes;
using namespace System::Diagnostics;

ref class PipeServer
{
public:
    static void Main()
    {
        Process^ pipeClient = gcnew Process();

        pipeClient->StartInfo->FileName = "pipeClient.exe";

        AnonymousPipeServerStream^ pipeServer =
            gcnew AnonymousPipeServerStream(PipeDirection::Out,
            HandleInheritability::Inheritable);

        Console::WriteLine("[SERVER] Current TransmissionMode: {0}.",
            pipeServer->TransmissionMode);

        // Pass the client process a handle to the server.
        pipeClient->StartInfo->Arguments =
            pipeServer->GetClientHandleAsString();
        pipeClient->StartInfo->UseShellExecute = false;
        pipeClient->Start();

        pipeServer->DisposeLocalCopyOfClientHandle();

        try
        {
            // Read user input and send that to the client process.
            StreamWriter^ sw = gcnew StreamWriter(pipeServer);

            sw->AutoFlush = true;
            // Send a 'sync message' and wait for client to receive it.
            sw->WriteLine("SYNC");
            pipeServer->WaitForPipeDrain();
            // Send the console input to the client process.
            Console::Write("[SERVER] Enter text: ");
            sw->WriteLine(Console::ReadLine());
            sw->Close();
        }
        // Catch the IOException that is raised if the pipe is broken
        // or disconnected.
        catch (IOException^ e)
        {
            Console::WriteLine("[SERVER] Error: {0}", e->Message);
        }
        pipeServer->Close();
        pipeClient->WaitForExit();
        pipeClient->Close();
        Console::WriteLine("[SERVER] Client quit. Server terminating.");
    }
};

int main()
{
    PipeServer::Main();
}
//</snippet01>
//<snippet01>
using System;
using System.IO;
using System.IO.Pipes;
using System.Diagnostics;

class PipeServer
{
    static void Main()
    {
        Process pipeClient = new Process();

        pipeClient.StartInfo.FileName = "pipeClient.exe";

        using (AnonymousPipeServerStream pipeServer =
            new AnonymousPipeServerStream(PipeDirection.Out,
            HandleInheritability.Inheritable))
        {
            Console.WriteLine("[SERVER] Current TransmissionMode: {0}.",
                pipeServer.TransmissionMode);

            // Pass the client process a handle to the server.
            pipeClient.StartInfo.Arguments =
                pipeServer.GetClientHandleAsString();
            pipeClient.StartInfo.UseShellExecute = false;
            pipeClient.Start();

            pipeServer.DisposeLocalCopyOfClientHandle();

            try
            {
                // Read user input and send that to the client process.
                using (StreamWriter sw = new StreamWriter(pipeServer))
                {
                    sw.AutoFlush = true;
                    // Send a 'sync message' and wait for client to receive it.
                    sw.WriteLine("SYNC");
                    pipeServer.WaitForPipeDrain();
                    // Send the console input to the client process.
                    Console.Write("[SERVER] Enter text: ");
                    sw.WriteLine(Console.ReadLine());
                }
            }
            // Catch the IOException that is raised if the pipe is broken
            // or disconnected.
            catch (IOException e)
            {
                Console.WriteLine("[SERVER] Error: {0}", e.Message);
            }
        }

        pipeClient.WaitForExit();
        pipeClient.Close();
        Console.WriteLine("[SERVER] Client quit. Server terminating.");
    }
}
//</snippet01>
'<snippet01>
Imports System.IO
Imports System.IO.Pipes
Imports System.Diagnostics

Class PipeServer
    Shared Sub Main()
        Dim pipeClient As New Process()

        pipeClient.StartInfo.FileName = "pipeClient.exe"

        Using pipeServer As New AnonymousPipeServerStream(PipeDirection.Out, _
            HandleInheritability.Inheritable)

            Console.WriteLine("[SERVER] Current TransmissionMode: {0}.",
                pipeServer.TransmissionMode)

            ' Pass the client process a handle to the server.
            pipeClient.StartInfo.Arguments = pipeServer.GetClientHandleAsString()
            pipeClient.StartInfo.UseShellExecute = false
            pipeClient.Start()

            pipeServer.DisposeLocalCopyOfClientHandle()

            Try
                ' Read user input and send that to the client process.
                Using sw As New StreamWriter(pipeServer)
                    sw.AutoFlush = true
                    ' Send a 'sync message' and wait for client to receive it.
                    sw.WriteLine("SYNC")
                    pipeServer.WaitForPipeDrain()
                    ' Send the console input to the client process.
                    Console.Write("[SERVER] Enter text: ")
                    sw.WriteLine(Console.ReadLine())
                End Using
            Catch e As IOException
                ' Catch the IOException that is raised if the pipe is broken
                ' or disconnected.
                Console.WriteLine("[SERVER] Error: {0}", e.Message)
            End Try
        End Using

        pipeClient.WaitForExit()
        pipeClient.Close()
        Console.WriteLine("[SERVER] Client quit. Server terminating.")
    End Sub
End Class
'</snippet01>

Poznámky

Anonymní kanály pomáhají zajistit bezpečnou a zabezpečenou komunikaci mezi podřízenými a nadřazeným procesy. Třída AnonymousPipeServerStream umožňuje nadřazený proces odesílat nebo přijímat informace z podřízeného procesu.

Anonymní kanály jsou nepojmenované jednosměrné kanály, které obvykle přenášejí data mezi nadřazeným a podřízeným procesy. Anonymní kanály jsou vždy místní; nelze je použít přes síť. PipeDirection hodnota InOut není podporována, protože anonymní kanály jsou definované tak, aby byly jednosměrné.

Anonymní kanály nepodporují režim PipeTransmissionMode.Message čtení.

Klientská strana anonymního kanálu musí být vytvořena z popisovače kanálu poskytovaného serverem voláním metody GetClientHandleAsString. Řetězec se pak předá jako parametr při vytváření procesu klienta. Z procesu klienta se pak předá konstruktoru AnonymousPipeClientStream jako parametr pipeHandleAsString.

Objekt AnonymousPipeServerStream musí likvidovat popisovač klienta pomocí metody DisposeLocalCopyOfClientHandle, aby byl upozorněn při ukončení klienta.

Konstruktory

AnonymousPipeServerStream()

Inicializuje novou instanci AnonymousPipeServerStream třídy.

AnonymousPipeServerStream(PipeDirection)

Inicializuje novou instanci AnonymousPipeServerStream třídy se zadaným směrem kanálu.

AnonymousPipeServerStream(PipeDirection, HandleInheritability)

Inicializuje novou instanci AnonymousPipeServerStream třídy se zadaným směrem potrubí a režim dědičnosti.

AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32)

Inicializuje novou instanci třídy AnonymousPipeServerStream se zadaným směrem kanálu, režim dědičnosti a velikost vyrovnávací paměti.

AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32, PipeSecurity)

Inicializuje novou instanci třídy AnonymousPipeServerStream se zadaným směrem kanálu, režim dědičnosti, velikost vyrovnávací paměti a zabezpečení kanálu.

AnonymousPipeServerStream(PipeDirection, SafePipeHandle, SafePipeHandle)

Inicializuje novou instanci třídy AnonymousPipeServerStream ze zadaných úchytů kanálu.

Vlastnosti

CanRead

Získá hodnotu určující, zda aktuální datový proud podporuje operace čtení.

(Zděděno od PipeStream)
CanSeek

Získá hodnotu určující, zda aktuální datový proud podporuje operace hledání.

(Zděděno od PipeStream)
CanTimeout

Získá hodnotu, která určuje, zda aktuální datový proud může vypršení časového limitu.

(Zděděno od Stream)
CanWrite

Získá hodnotu určující, zda aktuální datový proud podporuje operace zápisu.

(Zděděno od PipeStream)
ClientSafePipeHandle

Získá bezpečný popisovač pro AnonymousPipeClientStream objektu, který je aktuálně připojen k AnonymousPipeServerStream objektu.

InBufferSize

Získá velikost příchozí vyrovnávací paměti pro potrubí v bajtech.

(Zděděno od PipeStream)
IsAsync

Získá hodnotu určující, zda PipeStream objekt byl otevřen asynchronně nebo synchronně.

(Zděděno od PipeStream)
IsConnected

Získá nebo nastaví hodnotu určující, zda PipeStream objekt je připojen.

(Zděděno od PipeStream)
IsHandleExposed

Získá hodnotu určující, zda popisovač PipeStream objekt je vystaven.

(Zděděno od PipeStream)
IsMessageComplete

Získá hodnotu určující, zda je ve zprávě vrácených z poslední operace čtení více dat.

(Zděděno od PipeStream)
Length

Získá délku datového proudu v bajtech.

(Zděděno od PipeStream)
OutBufferSize

Získá velikost odchozí vyrovnávací paměti pro kanál v bajtech.

(Zděděno od PipeStream)
Position

Získá nebo nastaví aktuální pozici aktuálního datového proudu.

(Zděděno od PipeStream)
ReadMode

Nastaví režim čtení pro objekt AnonymousPipeServerStream. Pro anonymní kanály musí být režim přenosu Byte.

ReadTimeout

Získá nebo nastaví hodnotu v milisekundách, která určuje, jak dlouho se datový proud pokusí přečíst před uplynutím časového limitu.

(Zděděno od Stream)
SafePipeHandle

Získá bezpečný popisovač pro místní konec potrubí, který aktuální PipeStream objekt zapouzdřuje.

(Zděděno od PipeStream)
TransmissionMode

Získá režim přenosu potrubí, který je podporován aktuálním potrubím.

WriteTimeout

Získá nebo nastaví hodnotu v milisekundách, která určuje, jak dlouho se datový proud pokusí zapsat před uplynutím časového limitu.

(Zděděno od Stream)

Metody

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Zahájí asynchronní operaci čtení.

(Zděděno od PipeStream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Zahájí asynchronní operaci zápisu.

(Zděděno od PipeStream)
CheckPipePropertyOperations()

Ověřuje, že kanál je ve správném stavu pro získání nebo nastavení vlastností.

(Zděděno od PipeStream)
CheckReadOperations()

Ověřuje, že kanál je v připojeném stavu pro operace čtení.

(Zděděno od PipeStream)
CheckWriteOperations()

Ověřuje, že kanál je v připojeném stavu pro operace zápisu.

(Zděděno od PipeStream)
Close()

Zavře aktuální datový proud a uvolní všechny prostředky (například sokety a popisovače souborů) přidružené k aktuálnímu datovému proudu. Místo volání této metody se ujistěte, že je datový proud správně uvolněn.

(Zděděno od Stream)
CopyTo(Stream)

Přečte bajty z aktuálního datového proudu a zapíše je do jiného datového proudu. Obě pozice datových proudů jsou rozšířeny počtem bajtů zkopírovaných.

(Zděděno od Stream)
CopyTo(Stream, Int32)

Načte bajty z aktuálního datového proudu a zapíše je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti. Obě pozice datových proudů jsou rozšířeny počtem bajtů zkopírovaných.

(Zděděno od Stream)
CopyToAsync(Stream)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu. Obě pozice datových proudů jsou rozšířeny počtem bajtů zkopírovaných.

(Zděděno od Stream)
CopyToAsync(Stream, CancellationToken)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu pomocí zadaného tokenu zrušení. Obě pozice datových proudů jsou rozšířeny počtem bajtů zkopírovaných.

(Zděděno od Stream)
CopyToAsync(Stream, Int32)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti. Obě pozice datových proudů jsou rozšířeny počtem bajtů zkopírovaných.

(Zděděno od Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti a tokenu zrušení. Obě pozice datových proudů jsou rozšířeny počtem bajtů zkopírovaných.

(Zděděno od Stream)
CreateObjRef(Type)

Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy serveru sloužícího ke komunikaci se vzdáleným objektem.

(Zděděno od MarshalByRefObject)
CreateWaitHandle()
Zastaralé.
Zastaralé.
Zastaralé.

Přidělí objekt WaitHandle.

(Zděděno od Stream)
Dispose()

Uvolní všechny prostředky používané Stream.

(Zděděno od Stream)
Dispose(Boolean)

Uvolní nespravované prostředky používané PipeStream třídou a volitelně uvolní spravované prostředky.

(Zděděno od PipeStream)
DisposeAsync()

Asynchronně uvolní nespravované prostředky používané Stream.

(Zděděno od Stream)
DisposeLocalCopyOfClientHandle()

Zavře místní kopii popisovače objektu AnonymousPipeClientStream.

EndRead(IAsyncResult)

Ukončí čekající asynchronní požadavek na čtení.

(Zděděno od PipeStream)
EndWrite(IAsyncResult)

Ukončí čekající asynchronní požadavek na zápis.

(Zděděno od PipeStream)
Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
Finalize()

Uvolní nespravované prostředky a provede další operace čištění před uvolněním paměti instance AnonymousPipeServerStream.

Flush()

Vymaže vyrovnávací paměť pro aktuální datový proud a způsobí zápis veškerých dat uložených do vyrovnávací paměti do podkladového zařízení.

(Zděděno od PipeStream)
FlushAsync()

Asynchronně vymaže všechny vyrovnávací paměti pro tento datový proud a způsobí zápis všech dat uložených do vyrovnávací paměti do podkladového zařízení.

(Zděděno od Stream)
FlushAsync(CancellationToken)

Asynchronně vymaže vyrovnávací paměť pro aktuální datový proud a způsobí zápis všech uložených dat do základního zařízení.

(Zděděno od PipeStream)
GetAccessControl()

Získá PipeSecurity objekt, který zapouzdřuje položky seznamu řízení přístupu (ACL) pro kanál popsaný aktuálním objektem PipeStream.

(Zděděno od PipeStream)
GetClientHandleAsString()

Získá připojený AnonymousPipeClientStream objekt popisovač jako řetězec.

GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetLifetimeService()
Zastaralé.

Načte objekt služby aktuální životnosti, který řídí zásady životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
InitializeHandle(SafePipeHandle, Boolean, Boolean)

Inicializuje objekt PipeStream ze zadaného objektu SafePipeHandle.

(Zděděno od PipeStream)
InitializeLifetimeService()
Zastaralé.

Získá objekt služby životnosti pro řízení zásad životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
MemberwiseClone(Boolean)

Vytvoří mělkou kopii aktuálního objektu MarshalByRefObject.

(Zděděno od MarshalByRefObject)
ObjectInvariant()
Zastaralé.

Poskytuje podporu pro Contract.

(Zděděno od Stream)
Read(Byte[], Int32, Int32)

Načte blok bajtů z datového proudu a zapíše data do zadané vyrovnávací paměti počínaje zadanou pozicí pro zadanou délku.

(Zděděno od PipeStream)
Read(Span<Byte>)

Přečte posloupnost bajtů z aktuálního datového proudu, zapíše je do bajtového pole a posune pozici v datovém proudu o počet přečtených bajtů.

(Zděděno od PipeStream)
ReadAsync(Byte[], Int32, Int32)

Asynchronně čte posloupnost bajtů z aktuálního datového proudu a posune pozici v datovém proudu o počet přečtených bajtů.

(Zděděno od Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Asynchronně čte posloupnost bajtů z aktuálního datového proudu do bajtového pole počínaje zadanou pozicí pro zadaný počet bajtů, posune pozici v datovém proudu o počet přečtených bajtů a monitoruje žádosti o zrušení.

(Zděděno od PipeStream)
ReadAsync(Memory<Byte>, CancellationToken)

Asynchronně čte posloupnost bajtů z aktuálního datového proudu, zapíše je do bajtového rozsahu paměti, posune pozici v datovém proudu o počet přečtených bajtů a monitoruje požadavky na zrušení.

(Zděděno od PipeStream)
ReadAtLeast(Span<Byte>, Int32, Boolean)

Čte alespoň minimální počet bajtů z aktuálního datového proudu a posune pozici v datovém proudu o počet přečtených bajtů.

(Zděděno od Stream)
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

Asynchronně čte alespoň minimální počet bajtů z aktuálního datového proudu, posune pozici v rámci datového proudu o počet přečtených bajtů a monitoruje žádosti o zrušení.

(Zděděno od Stream)
ReadByte()

Přečte bajt z kanálu.

(Zděděno od PipeStream)
ReadExactly(Byte[], Int32, Int32)

Přečte count počet bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu.

(Zděděno od Stream)
ReadExactly(Span<Byte>)

Přečte bajty z aktuálního datového proudu a posune pozici v rámci datového proudu, dokud se buffer nenaplní.

(Zděděno od Stream)
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken)

Asynchronně čte count počet bajtů z aktuálního datového proudu, posune pozici v rámci datového proudu a monitoruje požadavky na zrušení.

(Zděděno od Stream)
ReadExactlyAsync(Memory<Byte>, CancellationToken)

Asynchronně čte bajty z aktuálního datového proudu, posune pozici v rámci datového proudu, dokud se buffer nenaplní, a monitoruje žádosti o zrušení.

(Zděděno od Stream)
Seek(Int64, SeekOrigin)

Nastaví aktuální pozici aktuálního datového proudu na zadanou hodnotu.

(Zděděno od PipeStream)
SetAccessControl(PipeSecurity)

Použije položky seznamu řízení přístupu (ACL) určené objektem PipeSecurity na kanál určený aktuálním objektem PipeStream objektu.

(Zděděno od PipeStream)
SetLength(Int64)

Nastaví délku aktuálního datového proudu na zadanou hodnotu.

(Zděděno od PipeStream)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
WaitForPipeDrain()

Čeká na druhý konec kanálu, aby přečetl všechny odeslané bajty.

(Zděděno od PipeStream)
Write(Byte[], Int32, Int32)

Zapíše blok bajtů do aktuálního datového proudu pomocí dat z vyrovnávací paměti.

(Zděděno od PipeStream)
Write(ReadOnlySpan<Byte>)

Zapíše posloupnost bajtů do aktuálního datového proudu a posune aktuální pozici v tomto datovém proudu o počet zapsaných bajtů.

(Zděděno od PipeStream)
WriteAsync(Byte[], Int32, Int32)

Asynchronně zapíše posloupnost bajtů do aktuálního datového proudu a posune aktuální pozici v tomto datovém proudu o počet zapsaných bajtů.

(Zděděno od Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Asynchronně zapíše zadaný počet bajtů z bajtového pole počínaje zadanou pozicí, posune aktuální pozici v tomto datovém proudu o počet zapsaných bajtů a monitoruje žádosti o zrušení.

(Zděděno od PipeStream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Asynchronně zapíše posloupnost bajtů do aktuálního datového proudu, posune aktuální pozici v tomto datovém proudu o počet zapsaných bajtů a monitoruje žádosti o zrušení.

(Zděděno od PipeStream)
WriteByte(Byte)

Zapíše bajt do aktuálního datového proudu.

(Zděděno od PipeStream)

Metody rozšíření

CopyToAsync(Stream, PipeWriter, CancellationToken)

Asynchronně čte bajty z Stream a zapisuje je do zadané PipeWriterpomocí tokenu zrušení.

GetAccessControl(PipeStream)

Vrátí informace o zabezpečení datového proudu kanálu.

SetAccessControl(PipeStream, PipeSecurity)

Změní atributy zabezpečení existujícího datového proudu kanálu.

ConfigureAwait(IAsyncDisposable, Boolean)

Konfiguruje, jak čekají na úlohy vrácené z asynchronního jednorázového použití.

Platí pro