NegotiateStream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) Methode

Definition

Startet einen asynchronen Schreibvorgang, der Byte vom angegebenen Puffer in den Stream schreibt.Begins an asynchronous write operation that writes Bytes from the specified buffer to the stream.

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

Parameter

buffer
Byte[]

Ein Byte-Array, das die Bytes bereitstellt, die in den Stream geschrieben werden sollen.A Byte array that supplies the bytes to be written to the stream.

offset
Int32

Der nullbasierte Speicherort in buffer, ab dem das Lesen der in den Stream zu schreibenden Bytes begonnen werden soll.The zero-based location in buffer at which to begin reading bytes to be written to the stream.

count
Int32

Ein Int32-Wert, der die Anzahl der vom buffer zu lesenden Bytes angibt.An Int32 value that specifies the number of bytes to read from buffer.

asyncCallback
AsyncCallback

Ein AsyncCallback-Delegat, der auf die Methode verweist, die aufgerufen wird, wenn der Schreibvorgang beendet wurde.An AsyncCallback delegate that references the method to invoke when the write operation is complete.

asyncState
Object

Ein benutzerdefiniertes Objekt, das Informationen zum Schreibvorgang enthält.A user-defined object containing information about the write operation. Dieses Objekt wird bei Abschluss des Vorgangs an den asyncCallback-Delegaten übergeben.This object is passed to the asyncCallback delegate when the operation completes.

Gibt zurück

Ein IAsyncResult-Objekt, das den Status des asynchronen Vorgangs angibt.An IAsyncResult object indicating the status of the asynchronous operation.

Ausnahmen

buffer ist null.buffer is null.

offset is less than 0.offset is less than 0.

- oder --or- offset ist größer als die Länge von buffer.offset is greater than the length of buffer.

- oder --or- Die Summe von offset und count ist größer als die Länge von buffer.offset plus count is greater than the length of buffer.

Fehler beim Schreibvorgang.The write operation failed.

- oder --or-

Die Verschlüsselung wird verwendet, die Daten konnten jedoch nicht verschlüsselt werden.Encryption is in use, but the data could not be encrypted.

Es wird bereits ein Schreibvorgang ausgeführt.There is already a write operation in progress.

Dieses Objekt wurde geschlossen.This object has been closed.

Es ist keine Authentifizierung erfolgt.Authentication has not occurred.

Beispiele

Im folgenden Beispiel wird das Starten eines asynchronen Schreibvorgangs veranschaulicht.The following example demonstrates beginning an asynchronous write operation.

// Request authentication.
NetworkStream^ clientStream = client->GetStream();
NegotiateStream^ authStream = gcnew NegotiateStream( clientStream,false );

// Pass the NegotiateStream as the AsyncState object 
// so that it is available to the callback delegate.
IAsyncResult^ ar = authStream->BeginAuthenticateAsClient( gcnew AsyncCallback( EndAuthenticateCallback ), authStream );

Console::WriteLine( L"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.
array<Byte>^message = Encoding::UTF8->GetBytes( L"Hello from the client." );
ar = authStream->BeginWrite( message, 0, message->Length, gcnew AsyncCallback( EndWriteCallback ), authStream );

// 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.
IAsyncResult ar = authStream.BeginAuthenticateAsClient(
    new AsyncCallback(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.
byte[] message = Encoding.UTF8.GetBytes("Hello from the client.");
ar = authStream.BeginWrite(message, 0, message.Length,
    new AsyncCallback(EndWriteCallback),
    authStream);
' 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 wird.The following method is called when the operation completes.

// The following method is called when the write operation completes.
static void EndWriteCallback( IAsyncResult^ ar )
{
   Console::WriteLine( L"Client ending write operation..." );
   NegotiateStream^ authStream = dynamic_cast<NegotiateStream^>(ar->AsyncState);
   
   // End the asynchronous operation.
   authStream->EndWrite( ar );
}

// The following method is called when the write operation completes.
public static void EndWriteCallback (IAsyncResult ar)
{
    Console.WriteLine("Client ending write operation...");
    NegotiateStream authStream = (NegotiateStream) ar.AsyncState;

    // End the asynchronous operation.
    authStream.EndWrite(ar);
}
' 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, Signierung oder Verschlüsselung und Signierung aktiviert ist, liest diese Methode die Daten aus dem Puffer, verschlüsselt, signiert oder verschlüsselt Sie und überträgt sie mit dem zugrunde liegenden Stream.If encryption, signing, or encryption and signing are enabled, this method reads the data from buffer, encrypts, signs, or encrypts and signs it, and transmits it using the underlying stream. Wenn keine Sicherheitsdienste wie Datenverschlüsselung oder Signierung verwendet werden, startet diese Methode einen asynchronen Schreibvorgang für den zugrunde liegenden Stream.If no security services such as data encryption or signing are in use, this method starts an asynchronous write operation on the underlying stream.

Diese Methode ist asynchron und wird nicht blockiert, während der Vorgang abgeschlossen wird.This method is asynchronous and does not block while the operation completes. Um zu blockieren, bis der Vorgang abgeschlossen ist Read , verwenden Sie die-Methode.To block until the operation completes, use the Read method.

Der asynchrone Lesevorgang muss durch Aufrufen der EndWrite -Methode abgeschlossen werden.The asynchronous read operation must be completed by calling the EndWrite method. In der Regel wird die-Methode vom asyncCallback -Delegaten aufgerufen.Typically, the method is invoked by the asyncCallback delegate. Ausführliche Informationen zur Verwendung des asynchronen Programmiermodells finden Sie unter Asynchrones Aufrufen synchroner Methoden .For detailed information about using the asynchronous programming model, see Calling Synchronous Methods Asynchronously

Die NegotiateStream -Klasse unterstützt nicht mehrere gleichzeitige Schreibvorgänge.The NegotiateStream class does not support multiple simultaneous write operations. Wenn Sie versuchen, einen Schreibvorgang zu starten, während bereits ein anderer Schreibvorgang im gleichen Stream ausgeführt wird NotSupportedException , wird eine-Ausnahme ausgelöst.If you attempt to start a write operation while another write operation is already executing on the same stream, a NotSupportedException exception will be thrown.

Diese Methode kann erst aufgerufen werden, nachdem Sie sich erfolgreich authentifiziert haben.You cannot call this method until you have successfully authenticated. Um sich zu authentifizieren, wenden Sie AuthenticateAsClienteine BeginAuthenticateAsClientder AuthenticateAsServerMethoden, BeginAuthenticateAsServer , oder an.To authenticate, call one of the AuthenticateAsClient, BeginAuthenticateAsClient, AuthenticateAsServer, or BeginAuthenticateAsServer methods.

Gilt für: