NegotiateStream.BeginWrite Metod

Definition

Påbörjar en asynkron skrivåtgärd som skriver Bytes från den angivna bufferten till dataströmmen.

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

Parametrar

buffer
Byte[]

En Byte matris som tillhandahåller byte som ska skrivas till strömmen.

offset
Int32

Den nollbaserade plats buffer där byte som ska skrivas till strömmen ska börja läsas.

count
Int32

Ett Int32 värde som anger antalet byte som ska läsas från buffer.

asyncCallback
AsyncCallback

Ett AsyncCallback ombud som refererar till metoden för att anropa när skrivåtgärden är klar.

asyncState
Object

Ett användardefinierat objekt som innehåller information om skrivå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 plusantalet är större än längden på buffer.

Skrivåtgärden misslyckades.

-eller-

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

Det pågår redan en skrivåtgärd.

Det här objektet har stängts.

Autentiseringen har inte inträffat.

Exempel

I följande exempel visas hur du påbörjar en asynkron skrivåtgärd.

// Request authentication.
NetworkStream clientStream = client.GetStream();
NegotiateStream authStream = new NegotiateStream(clientStream, false);
// Pass the NegotiateStream as the AsyncState object
// so that it is available to the callback delegate.
Task authenticateTask = authStream
    .AuthenticateAsClientAsync()
    .ContinueWith(task =>
    {
        Console.WriteLine("Client ending authentication...");
        Console.WriteLine("ImpersonationLevel: {0}", authStream.ImpersonationLevel);
    });

Console.WriteLine("Client waiting for authentication...");
// Wait until the result is available.
authenticateTask.Wait();
// Display the properties of the authenticated stream.
AuthenticatedStreamReporter.DisplayProperties(authStream);
// Send a message to the server.
// Encode the test data into a byte array.
byte[] message = Encoding.UTF8.GetBytes("Hello from the client.");
Task writeTask = authStream
    .WriteAsync(message, 0, message.Length)
    .ContinueWith(task =>
    {
        Console.WriteLine("Client ending write operation...");
    });

' Request authentication.
Dim clientStream = client.GetStream()
Dim authStream As New NegotiateStream(clientStream, False)

' Pass the NegotiateStream as the AsyncState object 
' so that it is available to the callback delegate.
Dim ar = authStream.BeginAuthenticateAsClient(
    New AsyncCallback(AddressOf EndAuthenticateCallback), authStream)

Console.WriteLine("Client waiting for authentication...")

' Wait until the result is available.
ar.AsyncWaitHandle.WaitOne()

' Display the properties of the authenticated stream.
AuthenticatedStreamReporter.DisplayProperties(authStream)

' Send a message to the server.
' Encode the test data into a byte array.
Dim message = Encoding.UTF8.GetBytes("Hello from the client.")
ar = authStream.BeginWrite(message, 0, message.Length, 
    New AsyncCallback(AddressOf EndWriteCallback), authStream)

Följande metod anropas när åtgärden slutförs.

' The following method is called when the write operation completes.
Public Shared Sub EndWriteCallback(ar As IAsyncResult)

    Console.WriteLine("Client ending write operation...")
    Dim authStream = CType(ar.AsyncState, NegotiateStream)

    ' End the asynchronous operation.
    authStream.EndWrite(ar)

End Sub

Kommentarer

Om kryptering, signering eller kryptering och signering är aktiverade läser den här metoden data från buffert, krypterar, signerar eller krypterar och signerar dem och överför dem med hjälp av den underliggande strömmen. Om inga säkerhetstjänster som datakryptering eller signering används startar den här metoden en asynkron skrivåtgärd på den underliggande strö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 EndWrite 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 skrivåtgärder. Om du försöker starta en skrivåtgärd medan en annan skrivå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