NegotiateStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) メソッド

定義

ストリームからデータを読み取り、指定した配列に格納する非同期読み取り操作を開始します。Begins an asynchronous read operation that reads data from the stream and stores it in the specified array.

public:
 override IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ asyncCallback, System::Object ^ asyncState);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback? asyncCallback, object? asyncState);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState);
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginRead (buffer As Byte(), offset As Integer, count As Integer, asyncCallback As AsyncCallback, asyncState As Object) As IAsyncResult

パラメーター

buffer
Byte[]

ストリームから読み取ったバイトを受け取る Byte 配列。A Byte array that receives the bytes read from the stream.

offset
Int32

このストリームから読み取ったデータの格納を開始する位置を示す、buffer 内のインデックス番号が 0 から始まる位置。The zero-based location in buffer at which to begin storing the data read from this stream.

count
Int32

ストリームから読み取る最大バイト数。The maximum number of bytes to read from the stream.

asyncCallback
AsyncCallback

読み取り操作の完了時に呼び出すメソッドを参照する AsyncCallback デリゲート。An AsyncCallback delegate that references the method to invoke when the read operation is complete.

asyncState
Object

読み取り操作に関する情報を格納するユーザー定義のオブジェクト。A user-defined object containing information about the read operation. このオブジェクトは、操作の完了時に asyncCallback デリゲートに渡されます。This object is passed to the asyncCallback delegate when the operation completes.

戻り値

IAsyncResult

非同期操作の状態を示す IAsyncResult オブジェクト。An IAsyncResult object indicating the status of the asynchronous operation.

例外

buffernullです。buffer is null.

offset が 0 未満です。offset is less than 0.

または-or- offsetbuffer の長さを超えています。offset is greater than the length of buffer.

または-or- offsetcount を加算した値が、buffer の長さを超えています。offset plus count is greater than the length of buffer.

読み取り操作に失敗しました。The read operation failed.

または-or-

暗号化が使用されていますが、データを復号化できませんでした。Encryption is in use, but the data could not be decrypted.

既に実行中の読み取り操作が存在します。There is already a read operation in progress.

このオブジェクトは閉じられました。This object has been closed.

認証が行われていません。Authentication has not occurred.

次のコード例は、非同期の読み取り操作を開始する方法を示しています。The following code example demonstrates starting an asynchronous read operation. このコード例は、NegotiateStream クラスのために提供されている大規模な例の一部です。This code example is part of a larger example provided for the NegotiateStream class.

static void AuthenticateClient( TcpClient^ clientRequest )
{
   NetworkStream^ stream = clientRequest->GetStream();
   
   // Create the NegotiateStream.
   NegotiateStream^ authStream = gcnew NegotiateStream( stream,false );
   
   // Save the current client and NegotiateStream instance 
   // in a ClientState object.
   ClientState^ cState = gcnew ClientState( authStream,clientRequest );
   
   // Listen for the client authentication request.
   authStream->BeginAuthenticateAsServer( gcnew AsyncCallback( EndAuthenticateCallback ), cState );
   
   // Wait until the authentication completes.
   cState->Waiter->WaitOne();
   cState->Waiter->Reset();
   authStream->BeginRead( cState->Buffer, 0, cState->Buffer->Length, gcnew AsyncCallback( EndReadCallback ), cState );
   cState->Waiter->WaitOne();
   
   // Finished with the current client.
   authStream->Close();
   clientRequest->Close();
}


public static void AuthenticateClient(TcpClient clientRequest)
{
    NetworkStream stream = clientRequest.GetStream();
    // Create the NegotiateStream.
    NegotiateStream authStream = new NegotiateStream(stream, false);
    // Save the current client and NegotiateStream instance
    // in a ClientState object.
    ClientState cState = new ClientState(authStream, clientRequest);
    // Listen for the client authentication request.
    Task authTask = authStream
        .AuthenticateAsServerAsync()
        .ContinueWith(task => { EndAuthenticateCallback(cState); });

    // Any exceptions that occurred during authentication are
    // thrown by the EndAuthenticateAsServer method.
    try
    {
        // This call blocks until the authentication is complete.
        authTask.Wait();
    }
    catch (AuthenticationException e)
    {
        Console.WriteLine(e);
        Console.WriteLine("Authentication failed - closing connection.");
        return;
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        Console.WriteLine("Closing connection.");
        return;
    }

    Task<int> readTask = authStream
        .ReadAsync(cState.Buffer, 0, cState.Buffer.Length);

    readTask
        .ContinueWith((task) => { EndReadCallback(cState, task.Result); })
        .Wait();
    // Finished with the current client.
    authStream.Close();
    clientRequest.Close();
}

注釈

暗号化、署名、または暗号化と署名が有効になっている場合、読み取り操作は、基になるストリームからデータを読み取り、データの整合性をチェックし、復号化します。If encryption, signing, or encryption and signing are enabled, the read operation reads the data from the underlying stream, checks the integrity of the data, and decrypts it. データの暗号化や署名などのセキュリティサービスが使用されていない場合、このメソッドは、基になるストリームで非同期の読み取り操作を開始します。If no security services such as data encryption or signing are in use, this method starts an asynchronous read operation on the underlying stream.

このメソッドは非同期であり、操作の完了時にブロックされません。This method is asynchronous and does not block while the operation completes. 操作が完了するまでブロックするには、メソッドを使用し Read ます。To block until the operation completes, use the Read method.

非同期の読み取り操作は、メソッドを呼び出すことによって完了する必要があり EndRead ます。The asynchronous read operation must be completed by calling the EndRead method. 通常、メソッドはデリゲートによって呼び出され asyncCallback ます。Typically, the method is invoked by the asyncCallback delegate. 非同期プログラミングモデルの使用方法の詳細については、「同期メソッドの非同期呼び出し」を参照してください。For detailed information about using the asynchronous programming model, see Calling Synchronous Methods Asynchronously

クラスは、 NegotiateStream 複数の同時読み取り操作をサポートしていません。The NegotiateStream class does not support multiple simultaneous read operations. 同じストリームで別の読み取り操作が既に実行されているときに読み取り操作を開始しようとすると、 NotSupportedException 例外がスローされます。If you attempt to start a read operation while another read operation is already executing on the same stream, a NotSupportedException exception will be thrown.

が正常に認証されるまで、このメソッドを呼び出すことはできません。You cannot call this method until you have successfully authenticated. 認証するには、、、、、、のいずれかのメソッドを呼び出し AuthenticateAsClient AuthenticateAsClientAsync BeginAuthenticateAsClient AuthenticateAsServer AuthenticateAsServerAsync BeginAuthenticateAsServer ます。To authenticate, call one of the AuthenticateAsClient, AuthenticateAsClientAsync, BeginAuthenticateAsClient, AuthenticateAsServer, AuthenticateAsServerAsync, or BeginAuthenticateAsServer methods.

適用対象