NegotiateStream.BeginWrite Methode

Definition

Startet einen asynchronen ByteSchreibvorgang, der s aus dem angegebenen Puffer in den Datenstrom schreibt.

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

Parameter

buffer
Byte[]

Ein Byte Array, das die Bytes bereitstellt, die in den Datenstrom geschrieben werden sollen.

offset
Int32

Der nullbasierte Speicherort, an buffer dem mit dem Lesen von Bytes begonnen werden soll, die in den Datenstrom geschrieben werden sollen.

count
Int32

Ein Int32 Wert, der die Anzahl der Bytes angibt, aus bufferdenen gelesen werden soll.

asyncCallback
AsyncCallback

Ein AsyncCallback Delegat, der auf die Methode verweist, die aufgerufen werden soll, wenn der Schreibvorgang abgeschlossen ist.

asyncState
Object

Ein benutzerdefiniertes Objekt, das Informationen zum Schreibvorgang enthält. Dieses Objekt wird an den asyncCallback Delegaten übergeben, wenn der Vorgang abgeschlossen ist.

Gibt zurück

Ein IAsyncResult Objekt, das den Status des asynchronen Vorgangs angibt.

Ausnahmen

buffer ist null.

offset ist kleiner als 0.

-oder-

offset ist größer als die Länge von buffer.

-oder-

offset Plusanzahl ist größer als die Länge von buffer.

Fehler beim Schreibvorgang.

-oder-

Verschlüsselung wird verwendet, aber die Daten konnten nicht verschlüsselt werden.

Es wird bereits ein Schreibvorgang ausgeführt.

Dieses Objekt wurde geschlossen.

Die Authentifizierung ist nicht aufgetreten.

Beispiele

Das folgende Beispiel veranschaulicht den Beginn eines asynchronen Schreibvorgangs.

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

Die folgende Methode wird aufgerufen, wenn der Vorgang abgeschlossen ist.

' 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

Hinweise

Wenn Verschlüsselung, Signatur oder Verschlüsselung und Signatur aktiviert sind, liest diese Methode die Daten aus dem Puffer, verschlüsselt, signiert oder signiert sie und überträgt sie mithilfe des zugrunde liegenden Datenstroms. Wenn keine Sicherheitsdienste wie Datenverschlüsselung oder Anmeldung verwendet werden, startet diese Methode einen asynchronen Schreibvorgang für den zugrunde liegenden Datenstrom.

Diese Methode ist asynchron und blockiert nicht, während der Vorgang abgeschlossen ist. Um zu blockieren, bis der Vorgang abgeschlossen ist, verwenden Sie die Read Methode.

Der asynchrone Lesevorgang muss durch Aufrufen der EndWrite Methode abgeschlossen werden. In der asyncCallback Regel wird die Methode vom Delegaten aufgerufen. Ausführliche Informationen zur Verwendung des asynchronen Programmiermodells finden Sie unter asynchrones Aufrufen synchroner Methoden

Die NegotiateStream Klasse unterstützt nicht mehrere gleichzeitige Schreibvorgänge. Wenn Sie versuchen, einen Schreibvorgang zu starten, während ein anderer Schreibvorgang bereits im selben Datenstrom ausgeführt wird, wird eine NotSupportedException Ausnahme ausgelöst.

Sie können diese Methode erst aufrufen, nachdem Sie sich erfolgreich authentifiziert haben. Rufen Sie zum Authentifizieren eine der AuthenticateAsClientMethoden , , AuthenticateAsClientAsync, BeginAuthenticateAsClient, AuthenticateAsServer, oder AuthenticateAsServerAsyncBeginAuthenticateAsServer Methoden auf.

Gilt für: