NegotiateStream.BeginWrite Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
- offset
- Int32
Lokasi berbasis nol di buffer
mana untuk mulai membaca byte untuk ditulis ke aliran.
- 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
buffer
adalah 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 .