NegotiateStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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
- 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 buffer
büyük.
-veya-
offset
artı count
, uzunluğundan buffer
bü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.