NegotiateStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Metod

Definition

Påbörjar en asynkron läsåtgärd som läser data från dataströmmen och lagrar dem i den angivna matrisen.

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);
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

Parametrar

buffer
Byte[]

En Byte matris som tar emot byteen som läse från strömmen.

offset
Int32

Den nollbaserade plats buffer där du kan börja lagra data som lästs från den här dataströmmen.

count
Int32

Det maximala antalet byte som ska läsas från strömmen.

asyncCallback
AsyncCallback

Ett AsyncCallback ombud som refererar till metoden som ska anropas när läsåtgärden är klar.

asyncState
Object

Ett användardefinierat objekt som innehåller information om läsåtgärden. Det här objektet skickas till ombudet asyncCallback när åtgärden är klar.

Returer

Ett IAsyncResult objekt som anger status för den asynkrona åtgärden.

Undantag

buffer är null.

offset är mindre än 0.

-eller-

offset är större än längden på buffer.

-eller-

offset plus count är större än längden på buffer.

Läsåtgärden misslyckades.

-eller-

Kryptering används, men det gick inte att dekryptera data.

Det pågår redan en läsåtgärd.

Det här objektet har stängts.

Autentiseringen har inte inträffat.

Exempel

I följande kodexempel visas hur du startar en asynkron läsåtgärd. Det här kodexemplet är en del av ett större exempel för NegotiateStream klassen.

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();
}

Kommentarer

Om kryptering, signering eller kryptering och signering är aktiverade läser läsåtgärden data från den underliggande strömmen, kontrollerar dataintegriteten och dekrypterar dem. Om inga säkerhetstjänster som datakryptering eller signering används startar den här metoden en asynkron läsåtgärd på den underliggande dataströmmen.

Den här metoden är asynkron och blockerar inte när åtgärden är klar. Om du vill blockera tills åtgärden har slutförts använder du Read metoden .

Den asynkrona läsåtgärden EndRead måste slutföras genom att anropa metoden. Metoden anropas vanligtvis av ombudet asyncCallback . Detaljerad information om hur du använder den asynkrona programmeringsmodellen finns i Anropa synkrona metoder asynkront

Klassen NegotiateStream stöder inte flera samtidiga läsåtgärder. Om du försöker starta en läsåtgärd medan en annan läsåtgärd redan körs på samma ström genereras ett NotSupportedException undantag.

Du kan inte anropa den här metoden förrän du har autentiserats. Om du vill autentisera AuthenticateAsClientanropar du någon av metoderna , AuthenticateAsClientAsync, BeginAuthenticateAsClient, AuthenticateAsServer, AuthenticateAsServerAsynceller BeginAuthenticateAsServer .

Gäller för