Aracılığıyla paylaş


NegotiateStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Yöntem

Tanım

Akıştaki verileri okuyan ve belirtilen dizide depolayan zaman uyumsuz bir okuma işlemi başlatır.

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

Parametreler

buffer
Byte[]

Byte Akıştan okunan baytları alan bir dizi.

offset
Int32

Bu akıştan okunan verileri depolamaya başlamak için sıfır tabanlı konum buffer .

count
Int32

Akıştan okunacak bayt sayısı üst sınırı.

asyncCallback
AsyncCallback

AsyncCallback Okuma işlemi tamamlandığında çağırma yöntemine başvuran bir temsilci.

asyncState
Object

Okuma işlemi hakkında bilgi içeren kullanıcı tanımlı bir nesne. İşlem tamamlandığında bu nesne temsilciye asyncCallback geçirilir.

Döndürülenler

IAsyncResult Zaman uyumsuz işlemin durumunu gösteren bir nesne.

Özel durumlar

buffer, null değeridir.

offset 0'dan küçüktür.

-veya-

offset uzunluğundan bufferbüyük.

-veya-

offset artı count , uzunluğundan bufferbüyüktür.

Okuma işlemi başarısız oldu.

-veya-

Şifreleme kullanılıyor, ancak verilerin şifresi çözülemedi.

Devam eden bir okuma işlemi zaten var.

Bu nesne kapatıldı.

Kimlik doğrulaması gerçekleşmedi.

Örnekler

Aşağıdaki kod örneği zaman uyumsuz okuma işlemini başlatma işlemini gösterir. Bu kod örneği, sınıfı için NegotiateStream sağlanan daha büyük bir örneğin parçasıdır.

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();
}

Açıklamalar

Şifreleme, imzalama veya şifreleme ve imzalama etkinleştirildiyse, okuma işlemi temel alınan akıştaki verileri okur, verilerin bütünlüğünü denetler ve şifresini çözer. Veri şifreleme veya imzalama gibi hiçbir güvenlik hizmeti kullanımda değilse, bu yöntem temel alınan akışta zaman uyumsuz bir okuma işlemi başlatır.

Bu yöntem zaman uyumsuzdur ve işlem tamamlanırken engellemez. İşlem tamamlanana kadar engellemek için yöntemini kullanın Read .

Zaman uyumsuz okuma işlemi yöntemi çağrılarak EndRead tamamlanmalıdır. Genellikle, yöntemi temsilci tarafından çağrılır asyncCallback . Zaman uyumsuz programlama modelini kullanma hakkında ayrıntılı bilgi için bkz. Zaman Uyumlu Yöntemleri Zaman Uyumsuz Olarak Çağırma

sınıfı NegotiateStream birden çok eşzamanlı okuma işlemini desteklemez. Aynı akışta başka bir okuma işlemi yürütülürken bir okuma işlemi başlatmayı denerseniz, bir NotSupportedException özel durum oluşturulur.

Kimlik doğrulaması başarılı olana kadar bu yöntemi çağıramazsınız. Kimlik doğrulaması yapmak için , , AuthenticateAsClientAsync, BeginAuthenticateAsClient, AuthenticateAsServerAsyncAuthenticateAsServerveya BeginAuthenticateAsServer yöntemlerinden birini AuthenticateAsClientçağırın.

Şunlara uygulanır