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 verilerin depolandığı 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 nesne.
Özel durumlar
buffer
, null
değeridir.
offset
0'dan küçüktür.
-veya-
offset
, uzunluğundan buffer
büyüktür.
-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şlatmayı 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
NegotiateStream sınıfı birden çok eşzamanlı okuma işlemini desteklemez. Aynı akışta başka bir okuma işlemi zaten 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, BeginAuthenticateAsClientAuthenticateAsServer, AuthenticateAsServerAsyncveya BeginAuthenticateAsServer yöntemlerinden birini AuthenticateAsClientçağırın.
Şunlara uygulanır
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin