AnonymousPipeServerStream 类

定义

公开匿名管道周围的流,该管道既支持同步读写操作,也支持异步读写操作。Exposes a stream around an anonymous pipe, which supports both synchronous and asynchronous read and write operations.

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
继承
AnonymousPipeServerStream

示例

下面的示例使用匿名管道将一个字符串从父进程发送到子进程。The following example sends a string from a parent process to a child process using anonymous pipes. 此示例在父进程中创建 AnonymousPipeServerStream 对象,它的 PipeDirection 值为 PipeDirection.OutThis example creates an AnonymousPipeServerStream object in a parent process with a PipeDirection value of PipeDirection.Out. 它还在 PipeDirection 值为 PipeDirection.In的子进程中创建 AnonymousPipeClientStream 对象。It also creates an AnonymousPipeClientStream object in a child process with a PipeDirection value of PipeDirection.In. 接下来,父进程将用户提供的字符串发送给子进程。The parent process then sends a user-supplied string to the child process. 此字符串将显示在控制台中。The string is displayed to the console.

此示例适用于使用 AnonymousPipeServerStream 类的服务器进程。This example is for the server process, which uses the AnonymousPipeServerStream class. 有关完整的代码示例(包括管道客户端和服务器的代码),请参阅如何:使用匿名管道进行本地进程间通信For the entire code example, including the code for both the pipe client and server, see How to: Use Anonymous Pipes for Local Interprocess Communication.

//<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>

注解

匿名管道有助于在子进程和父进程之间提供安全的进程间通信。Anonymous pipes help provide safe and secure interprocess communication between child and parent processes. 使用 AnonymousPipeServerStream 类,可以使用父进程从子进程发送或接收信息。The AnonymousPipeServerStream class enables a parent process to send or receive information from a child process.

匿名管道是指通常在父进程和子进程之间传输数据的单向管道。Anonymous pipes are unnamed, one-way pipes that typically transfer data between parent and child processes. 匿名管道始终是本地的;它们不能通过网络使用。Anonymous pipes are always local; they cannot be used over a network. 不支持 InOut PipeDirection 值,因为匿名管道定义为单向。A PipeDirection value of InOut is not supported because anonymous pipes are defined to be one-way.

匿名管道不支持 PipeTransmissionMode.Message 读取模式。Anonymous pipes do not support the PipeTransmissionMode.Message read mode.

必须通过调用 GetClientHandleAsString 方法,从服务器端提供的管道句柄创建匿名管道的客户端。The client side of an anonymous pipe must be created from a pipe handle provided by the server side by calling the GetClientHandleAsString method. 然后,在创建客户端进程时将该字符串作为参数传递。The string is then passed as a parameter when creating the client process. 然后,将该客户端进程作为 pipeHandleAsString 参数传递给 AnonymousPipeClientStream 构造函数。From the client process, it is then passed to the AnonymousPipeClientStream constructor as the pipeHandleAsString parameter.

AnonymousPipeServerStream 对象必须使用 DisposeLocalCopyOfClientHandle 方法释放客户端句柄,以便在客户端退出时获得通知。The AnonymousPipeServerStream object must dispose the client handle using the DisposeLocalCopyOfClientHandle method in order to be notified when the client exits.

构造函数

AnonymousPipeServerStream()

初始化 AnonymousPipeServerStream 类的新实例。Initializes a new instance of the AnonymousPipeServerStream class.

AnonymousPipeServerStream(PipeDirection)

使用指定的管道方向初始化 AnonymousPipeServerStream 类的新实例。Initializes a new instance of the AnonymousPipeServerStream class with the specified pipe direction.

AnonymousPipeServerStream(PipeDirection, HandleInheritability)

使用指定的管道方向和继承模式初始化 AnonymousPipeServerStream 类的新实例。Initializes a new instance of the AnonymousPipeServerStream class with the specified pipe direction and inheritability mode.

AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32)

使用指定的管道方向、继承模式和缓冲区大小初始化 AnonymousPipeServerStream 类的新实例。Initializes a new instance of the AnonymousPipeServerStream class with the specified pipe direction, inheritability mode, and buffer size.

AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32, PipeSecurity)

使用指定的管道方向、继承模式、缓冲区大小和管道安全性初始化 AnonymousPipeServerStream 类的新实例。Initializes a new instance of the AnonymousPipeServerStream class with the specified pipe direction, inheritability mode, buffer size, and pipe security.

AnonymousPipeServerStream(PipeDirection, SafePipeHandle, SafePipeHandle)

从指定的管道句柄初始化 AnonymousPipeServerStream 类的新实例。Initializes a new instance of the AnonymousPipeServerStream class from the specified pipe handles.

属性

CanRead

获取一个值,该值指示当前流是否支持读操作。Gets a value indicating whether the current stream supports read operations.

(继承自 PipeStream)
CanSeek

获取一个值,该值指示当前流是否支持查找操作。Gets a value indicating whether the current stream supports seek operations.

(继承自 PipeStream)
CanTimeout

获取一个值,该值确定当前流是否可以超时。Gets a value that determines whether the current stream can time out.

(继承自 Stream)
CanWrite

获取一个值,该值指示当前流是否支持写操作。Gets a value indicating whether the current stream supports write operations.

(继承自 PipeStream)
ClientSafePipeHandle

获取 AnonymousPipeClientStream 对象的安全句柄,当前该对象连接到 AnonymousPipeServerStream 对象。Gets the safe handle for the AnonymousPipeClientStream object that is currently connected to the AnonymousPipeServerStream object.

InBufferSize

获取管道的入站缓冲区的大小(以字节为单位)。Gets the size, in bytes, of the inbound buffer for a pipe.

(继承自 PipeStream)
IsAsync

获取一个值,该值指示 PipeStream 对象是异步打开还是同步打开。Gets a value indicating whether a PipeStream object was opened asynchronously or synchronously.

(继承自 PipeStream)
IsConnected

获取或设置一个值,该值指示是否已连接 PipeStream 对象。Gets or sets a value indicating whether a PipeStream object is connected.

(继承自 PipeStream)
IsHandleExposed

获取一个值,该值指示是否公开了 PipeStream 对象的句柄。Gets a value indicating whether a handle to a PipeStream object is exposed.

(继承自 PipeStream)
IsMessageComplete

获取一个值,该值指示最近的读操作返回的消息中是否有更多数据。Gets a value indicating whether there is more data in the message returned from the most recent read operation.

(继承自 PipeStream)
Length

获取流长度(以字节为单位)。Gets the length of a stream, in bytes.

(继承自 PipeStream)
OutBufferSize

获取管道的出站缓冲区的大小(以字节为单位)。Gets the size, in bytes, of the outbound buffer for a pipe.

(继承自 PipeStream)
Position

获取或设置当前流的当前位置。Gets or sets the current position of the current stream.

(继承自 PipeStream)
ReadMode

设置 AnonymousPipeServerStream 对象的读取模式。Sets the reading mode for the AnonymousPipeServerStream object. 对于匿名管道,传输模式必须为 ByteFor anonymous pipes, transmission mode must be Byte.

ReadTimeout

获取或设置一个值(以毫秒为单位),该值确定流在超时前将尝试读取的时间。Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.

(继承自 Stream)
SafePipeHandle

获取当前 PipeStream 对象所封装的本地管道末端的安全句柄。Gets the safe handle for the local end of the pipe that the current PipeStream object encapsulates.

(继承自 PipeStream)
TransmissionMode

获取当前管道支持的管道传输模式。Gets the pipe transmission mode that is supported by the current pipe.

WriteTimeout

获取或设置一个值(以毫秒为单位),该值确定流在超时前将尝试写入多长时间。Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.

(继承自 Stream)

方法

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

开始执行异步读取操作。Begins an asynchronous read operation.

(继承自 PipeStream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

开始执行异步写入操作。Begins an asynchronous write operation.

(继承自 PipeStream)
CheckPipePropertyOperations()

验证管道是否处于可供获取或设置属性的正确状态。Verifies that the pipe is in a proper state for getting or setting properties.

(继承自 PipeStream)
CheckReadOperations()

验证管道是否处于可供进行读操作的连接状态。Verifies that the pipe is in a connected state for read operations.

(继承自 PipeStream)
CheckWriteOperations()

验证管道是否处于可供进行写操作的连接状态。Verifies that the pipe is in a connected state for write operations.

(继承自 PipeStream)
Close()

关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。Closes the current stream and releases any resources (such as sockets and file handles) associated with the current stream. 不直接调用此方法,而应确保流得以正确释放。Instead of calling this method, ensure that the stream is properly disposed.

(继承自 Stream)
CopyTo(Stream)

从当前流中读取字节并将其写入到另一流中。Reads the bytes from the current stream and writes them to another stream.

(继承自 Stream)
CopyTo(Stream, Int32)

使用指定的缓冲区大小,从当前流中读取字节并将其写入到另一流中。Reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

(继承自 Stream)
CopyToAsync(Stream)

从当前流中异步读取字节并将其写入到另一个流中。Asynchronously reads the bytes from the current stream and writes them to another stream.

(继承自 Stream)
CopyToAsync(Stream, CancellationToken)

通过指定的取消令牌,从当前流中异步读取字节并将其写入到另一个流中。Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified cancellation token.

(继承自 Stream)
CopyToAsync(Stream, Int32)

使用指定的缓冲区大小,从当前流中异步读取字节并将其写入到另一流中。Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

(继承自 Stream)
CopyToAsync(Stream, Int32, CancellationToken)

使用指定的缓冲区大小和取消令牌,从当前流中异步读取字节并将其写入到另一个流中。Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size and cancellation token.

(继承自 Stream)
CreateObjRef(Type)

创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(继承自 MarshalByRefObject)
CreateWaitHandle()

分配 WaitHandle 对象。Allocates a WaitHandle object.

(继承自 Stream)
Dispose()

释放 Stream 使用的所有资源。Releases all resources used by the Stream.

(继承自 Stream)
Dispose(Boolean)

释放 PipeStream 类使用的非托管资源,并可以选择释放托管资源。Releases the unmanaged resources used by the PipeStream class and optionally releases the managed resources.

(继承自 PipeStream)
DisposeAsync()

异步释放 Stream 使用的非托管资源。Asynchronously releases the unmanaged resources used by the Stream.

(继承自 Stream)
DisposeLocalCopyOfClientHandle()

关闭 AnonymousPipeClientStream 对象句柄的本地副本。Closes the local copy of the AnonymousPipeClientStream object's handle.

EndRead(IAsyncResult)

结束挂起的异步读取请求。Ends a pending asynchronous read request.

(继承自 PipeStream)
EndWrite(IAsyncResult)

结束挂起的异步写入请求。Ends a pending asynchronous write request.

(继承自 PipeStream)
Equals(Object)

确定指定的对象是否等于当前对象。Determines whether the specified object is equal to the current object.

(继承自 Object)
Finalize()

在通过垃圾回收将 AnonymousPipeServerStream 实例回收之前,释放非托管资源并执行其他清理操作。Releases unmanaged resources and performs other cleanup operations before the AnonymousPipeServerStream instance is reclaimed by garbage collection.

Flush()

清除当前流的缓冲区,并使所有缓冲的数据都写入到基础设备。Clears the buffer for the current stream and causes any buffered data to be written to the underlying device.

(继承自 PipeStream)
FlushAsync()

异步清除此流的所有缓冲区并导致所有缓冲数据都写入基础设备中。Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.

(继承自 Stream)
FlushAsync(CancellationToken)

异步清理这个流的所有缓冲区,并使所有缓冲数据写入基础设备,并且监控取消请求。Asynchronously clears all buffers for this stream, causes any buffered data to be written to the underlying device, and monitors cancellation requests.

(继承自 Stream)
GetAccessControl()

获取一个 PipeSecurity 对象,该对象封装当前 PipeStream 对象所描述管道的访问控制列表 (ACL) 项。Gets a PipeSecurity object that encapsulates the access control list (ACL) entries for the pipe described by the current PipeStream object.

(继承自 PipeStream)
GetClientHandleAsString()

以字符串形式获取已连接的 AnonymousPipeClientStream 对象的句柄。Gets the connected AnonymousPipeClientStream object's handle as a string.

GetHashCode()

用作默认哈希函数。Serves as the default hash function.

(继承自 Object)
GetLifetimeService()

检索控制此实例的生存期策略的当前生存期服务对象。Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(继承自 MarshalByRefObject)
GetType()

获取当前实例的 TypeGets the Type of the current instance.

(继承自 Object)
InitializeHandle(SafePipeHandle, Boolean, Boolean)

从指定的 PipeStream 对象中初始化 SafePipeHandle 对象。Initializes a PipeStream object from the specified SafePipeHandle object.

(继承自 PipeStream)
InitializeLifetimeService()

获取生存期服务对象来控制此实例的生存期策略。Obtains a lifetime service object to control the lifetime policy for this instance.

(继承自 MarshalByRefObject)
MemberwiseClone()

创建当前 Object 的浅表副本。Creates a shallow copy of the current Object.

(继承自 Object)
MemberwiseClone(Boolean)

创建当前 MarshalByRefObject 对象的浅表副本。Creates a shallow copy of the current MarshalByRefObject object.

(继承自 MarshalByRefObject)
ObjectInvariant()

提供对 Contract 的支持。Provides support for a Contract.

(继承自 Stream)
Read(Byte[], Int32, Int32)

从指定长度的指定位置开始,从流中读取一个字节块,并将数据写入指定的缓冲区。Reads a block of bytes from a stream and writes the data to a specified buffer starting at a specified position for a specified length.

(继承自 PipeStream)
Read(Span<Byte>)

从当前流中读取一个字节序列,将其写入字节数组,并按读取的字节数向前移动流中的位置。Reads a sequence of bytes from the current stream, writes them to a byte array, and advances the position within the stream by the number of bytes read.

(继承自 PipeStream)
ReadAsync(Byte[], Int32, Int32)

从当前流异步读取字节序列,并将流中的位置提升读取的字节数。Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

(继承自 Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

从指定字节数的指定位置开始,将当前流中的字节序列异步读取到字节数组,按读取的字节数向前移动流中的位置,并监视取消请求。Asynchronously reads a sequence of bytes from the current stream to a byte array starting at a specified position for a specified number of bytes, advances the position within the stream by the number of bytes read, and monitors cancellation requests.

(继承自 PipeStream)
ReadAsync(Memory<Byte>, CancellationToken)

从当前流异步读取字节的序列,将其写入字节内存范围,按读取的字节数向前移动流中的位置,并监视取消请求。Asynchronously reads a sequence of bytes from the current stream, writes them to a byte memory range, advances the position within the stream by the number of bytes read, and monitors cancellation requests.

(继承自 PipeStream)
ReadByte()

从管道读取字节。Reads a byte from a pipe.

(继承自 PipeStream)
Seek(Int64, SeekOrigin)

将当前流的当前位置设置为指定值。Sets the current position of the current stream to the specified value.

(继承自 PipeStream)
SetAccessControl(PipeSecurity)

PipeSecurity 对象所指定的访问控制列表 (ACL) 项应用于由当前 PipeStream 对象指定的管道。Applies the access control list (ACL) entries specified by a PipeSecurity object to the pipe specified by the current PipeStream object.

(继承自 PipeStream)
SetLength(Int64)

将当前流的长度设为指定值。Sets the length of the current stream to the specified value.

(继承自 PipeStream)
ToString()

返回一个表示当前对象的 string。Returns a string that represents the current object.

(继承自 Object)
WaitForPipeDrain()

等待管道另一端读取所有发送的字节。Waits for the other end of the pipe to read all sent bytes.

(继承自 PipeStream)
Write(Byte[], Int32, Int32)

使用缓冲区中的数据将字节块写入当前流。Writes a block of bytes to the current stream using data from a buffer.

(继承自 PipeStream)
Write(ReadOnlySpan<Byte>)

将字节序列写入当前流,并按写入的字节数向前调整流的当前位置。Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

(继承自 PipeStream)
WriteAsync(Byte[], Int32, Int32)

将字节序列异步写入当前流,并将流的当前位置提升写入的字节数。Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

(继承自 Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

从字节数组的指定位置开始异步写入指定字节数,按写入的字节数向前移动此流中的当前位置,并监视取消请求。Asynchronously writes a specified number of bytes from a byte array starting at a specified position, advances the current position within this stream by the number of bytes written, and monitors cancellation requests.

(继承自 PipeStream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

将字节的序列异步写入当前流,将该流中的当前位置向前移动写入的字节数,并监视取消请求。Asynchronously writes a sequence of bytes to the current stream, advances the current position within this stream by the number of bytes written, and monitors cancellation requests.

(继承自 PipeStream)
WriteByte(Byte)

将字节写入当前流。Writes a byte to the current stream.

(继承自 PipeStream)

显式接口实现

IDisposable.Dispose()

释放 Stream 使用的所有资源。Releases all resources used by the Stream.

(继承自 Stream)

扩展方法

GetAccessControl(PipeStream)
SetAccessControl(PipeStream, PipeSecurity)

适用于