Bagikan melalui


NegotiateStream.BeginWrite Metode

Definisi

Memulai operasi penulisan asinkron yang menulis Bytes dari buffer yang ditentukan ke aliran.

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[]

Array Byte yang memasok byte untuk ditulis ke aliran.

offset
Int32

Lokasi berbasis nol di buffer mana untuk mulai membaca byte untuk ditulis ke aliran.

count
Int32

Nilai Int32 yang menentukan jumlah byte yang akan dibaca dari buffer.

asyncCallback
AsyncCallback

Delegasi AsyncCallback yang mereferensikan metode yang akan dipanggil ketika operasi tulis selesai.

asyncState
Object

Objek yang ditentukan pengguna yang berisi informasi tentang operasi tulis. Objek ini diteruskan ke asyncCallback delegasi ketika operasi selesai.

Mengembalikan

Objek IAsyncResult yang menunjukkan status operasi asinkron.

Pengecualian

bufferadalah null.

offset is less than 0.

-atau-

offset lebih besar dari panjang buffer.

-atau-

offset jumlah plus lebih besar dari panjang buffer.

Operasi tulis gagal.

-atau-

Enkripsi sedang digunakan, tetapi data tidak dapat dienkripsi.

Sudah ada operasi tulis yang sedang berlangsung.

Objek ini telah ditutup.

Autentikasi belum terjadi.

Contoh

Contoh berikut menunjukkan memulai operasi tulis asinkron.

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

Metode berikut dipanggil ketika operasi selesai.

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

Keterangan

Jika enkripsi, penandatanganan, atau enkripsi dan penandatanganan diaktifkan, metode ini membaca data dari buffer, mengenkripsi, menandatangani, atau mengenkripsi dan menandatanganinya, dan mengirimkannya menggunakan aliran yang mendasar. Jika tidak ada layanan keamanan seperti enkripsi data atau penandatanganan yang digunakan, metode ini memulai operasi penulisan asinkron pada aliran yang mendasar.

Metode ini asinkron dan tidak memblokir saat operasi selesai. Untuk memblokir hingga operasi selesai, gunakan Read metode .

Operasi baca asinkron harus diselesaikan dengan memanggil EndWrite metode . Biasanya, metode ini dipanggil oleh asyncCallback delegasi. Untuk informasi terperinci tentang menggunakan model pemrograman asinkron, lihat Memanggil Metode Sinkron Secara Asinkron

Kelas NegotiateStream tidak mendukung beberapa operasi tulis simultan. Jika Anda mencoba memulai operasi tulis saat operasi tulis lain sudah dijalankan pada aliran yang sama, NotSupportedException pengecualian akan dilemparkan.

Anda tidak dapat memanggil metode ini sampai Anda berhasil diautentikasi. Untuk mengautentikasi, panggil salah AuthenticateAsClientsatu metode , , AuthenticateAsClientAsyncBeginAuthenticateAsClient, AuthenticateAsServerAuthenticateAsServerAsync, atau BeginAuthenticateAsServer .

Berlaku untuk