NegotiateStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) 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 baca asinkron yang membaca data dari aliran dan menyimpannya dalam array yang ditentukan.
public:
override IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ asyncCallback, System::Object ^ asyncState);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback? asyncCallback, object? asyncState);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState);
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginRead (buffer As Byte(), offset As Integer, count As Integer, asyncCallback As AsyncCallback, asyncState As Object) As IAsyncResult
Parameter
- offset
- Int32
Lokasi berbasis nol tempat buffer
mulai menyimpan data yang dibaca dari aliran ini.
- count
- Int32
Jumlah maksimum byte yang akan dibaca dari aliran.
- asyncCallback
- AsyncCallback
Delegasi AsyncCallback yang mereferensikan metode untuk dipanggil saat operasi baca selesai.
- asyncState
- Object
Objek yang ditentukan pengguna yang berisi informasi tentang operasi baca. Objek ini diteruskan ke asyncCallback
delegasi ketika operasi selesai.
Mengembalikan
Objek IAsyncResult yang menunjukkan status operasi asinkron.
Pengecualian
buffer
adalah null
.
offset
kurang dari 0.
-atau-
offset
lebih besar dari panjang buffer
.
-atau-
offset
plus count
lebih besar dari panjang buffer
.
Operasi baca gagal.
-atau-
Enkripsi sedang digunakan, tetapi data tidak dapat didekripsi.
Sudah ada operasi baca yang sedang berlangsung.
Objek ini telah ditutup.
Autentikasi belum terjadi.
Contoh
Contoh kode berikut menunjukkan memulai operasi baca asinkron. Contoh kode ini adalah bagian dari contoh yang lebih besar yang disediakan untuk NegotiateStream kelas .
static void AuthenticateClient( TcpClient^ clientRequest )
{
NetworkStream^ stream = clientRequest->GetStream();
// Create the NegotiateStream.
NegotiateStream^ authStream = gcnew NegotiateStream( stream,false );
// Save the current client and NegotiateStream instance
// in a ClientState object.
ClientState^ cState = gcnew ClientState( authStream,clientRequest );
// Listen for the client authentication request.
authStream->BeginAuthenticateAsServer( gcnew AsyncCallback( EndAuthenticateCallback ), cState );
// Wait until the authentication completes.
cState->Waiter->WaitOne();
cState->Waiter->Reset();
authStream->BeginRead( cState->Buffer, 0, cState->Buffer->Length, gcnew AsyncCallback( EndReadCallback ), cState );
cState->Waiter->WaitOne();
// Finished with the current client.
authStream->Close();
clientRequest->Close();
}
public static void AuthenticateClient(TcpClient clientRequest)
{
NetworkStream stream = clientRequest.GetStream();
// Create the NegotiateStream.
NegotiateStream authStream = new NegotiateStream(stream, false);
// Save the current client and NegotiateStream instance
// in a ClientState object.
ClientState cState = new ClientState(authStream, clientRequest);
// Listen for the client authentication request.
Task authTask = authStream
.AuthenticateAsServerAsync()
.ContinueWith(task => { EndAuthenticateCallback(cState); });
// Any exceptions that occurred during authentication are
// thrown by the EndAuthenticateAsServer method.
try
{
// This call blocks until the authentication is complete.
authTask.Wait();
}
catch (AuthenticationException e)
{
Console.WriteLine(e);
Console.WriteLine("Authentication failed - closing connection.");
return;
}
catch (Exception e)
{
Console.WriteLine(e);
Console.WriteLine("Closing connection.");
return;
}
Task<int> readTask = authStream
.ReadAsync(cState.Buffer, 0, cState.Buffer.Length);
readTask
.ContinueWith((task) => { EndReadCallback(cState, task.Result); })
.Wait();
// Finished with the current client.
authStream.Close();
clientRequest.Close();
}
Keterangan
Jika enkripsi, penandatanganan, atau enkripsi dan penandatanganan diaktifkan, operasi baca membaca data dari aliran yang mendasar, memeriksa integritas data, dan mendekripsinya. Jika tidak ada layanan keamanan seperti enkripsi data atau penandatanganan yang digunakan, metode ini memulai operasi baca 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 EndRead 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 baca simultan. Jika Anda mencoba memulai operasi baca saat operasi baca lain sudah dijalankan pada aliran yang sama, NotSupportedException pengecualian akan dilemparkan.
Anda tidak dapat memanggil metode ini sampai Anda berhasil mengautentikasi. Untuk mengautentikasi, panggil salah AuthenticateAsClientsatu metode , , AuthenticateAsClientAsyncBeginAuthenticateAsClient, AuthenticateAsServer, AuthenticateAsServerAsyncatau BeginAuthenticateAsServer .