Bagikan melalui


NegotiateStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Metode

Definisi

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

buffer
Byte[]

Array Byte yang menerima byte yang dibaca dari aliran.

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

bufferadalah 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 .

Berlaku untuk