SslStream.EndRead(IAsyncResult) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Avslutar en asynkron läsåtgärd som startades med ett tidigare anrop till BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).
public:
override int EndRead(IAsyncResult ^ asyncResult);
public override int EndRead(IAsyncResult asyncResult);
override this.EndRead : IAsyncResult -> int
Public Overrides Function EndRead (asyncResult As IAsyncResult) As Integer
Parametrar
- asyncResult
- IAsyncResult
En IAsyncResult instans som returneras av ett anrop till BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).
Returer
Ett Int32 värde som anger antalet byte som lästs från den underliggande strömmen.
Undantag
asyncResult är null.
asyncResult skapades inte av ett anrop till BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).
Det finns ingen väntande läsåtgärd att slutföra.
-eller-
Autentiseringen har inte inträffat.
Läsåtgärden misslyckades.
Exempel
I följande kodexempel visas hur du avslutar en asynkron läsåtgärd.
static void ReadCallback(IAsyncResult ar)
{
// Read the message sent by the server.
// The end of the message is signaled using the
// "<EOF>" marker.
SslStream stream = (SslStream) ar.AsyncState;
int byteCount = -1;
try
{
Console.WriteLine("Reading data from the server.");
byteCount = stream.EndRead(ar);
// Use Decoder class to convert from bytes to UTF8
// in case a character spans two buffers.
Decoder decoder = Encoding.UTF8.GetDecoder();
char[] chars = new char[decoder.GetCharCount(buffer,0, byteCount)];
decoder.GetChars(buffer, 0, byteCount, chars,0);
readData.Append (chars);
// Check for EOF or an empty message.
if (readData.ToString().IndexOf("<EOF>") == -1 && byteCount != 0)
{
// We are not finished reading.
// Asynchronously read more message data from the server.
stream.BeginRead(buffer, 0, buffer.Length,
new AsyncCallback(ReadCallback),
stream);
}
else
{
Console.WriteLine("Message from the server: {0}", readData.ToString());
}
}
catch (Exception readException)
{
e = readException;
complete = true;
return;
}
complete = true;
}
Shared Sub ReadCallback(ar As IAsyncResult)
' Read the message sent by the server.
' The end of the message is signaled using the
' "<EOF>" marker.
Dim stream = CType(ar.AsyncState, SslStream)
Dim byteCount As Integer
Try
Console.WriteLine("Reading data from the server.")
byteCount = stream.EndRead(ar)
' Use Decoder class to convert from bytes to UTF8
' in case a character spans two buffers.
Dim decoder As Decoder = Encoding.UTF8.GetDecoder()
Dim chars = New Char(decoder.GetCharCount(buffer, 0, byteCount)) {}
decoder.GetChars(buffer, 0, byteCount, chars, 0)
readData.Append(chars)
' Check for EOF or an empty message.
If readData.ToString().IndexOf("<EOF>") = -1 AndAlso byteCount <> 0 Then
' We are not finished reading.
' Asynchronously read more message data from the server.
stream.BeginRead(buffer, 0, buffer.Length, New AsyncCallback(AddressOf ReadCallback), stream)
Else
Console.WriteLine("Message from the server: {0}", readData.ToString())
End If
Catch readException As Exception
e = readException
complete = True
Return
End Try
complete = True
End Sub
Kommentarer
Om åtgärden inte har slutförts blockeras den här metoden tills den gör det.
Använd metoden för Read att utföra den här åtgärden synkront.
Du kan inte anropa den här metoden förrän du har autentiserats. Om du vill autentisera AuthenticateAsClientanropa någon av metoderna , eller BeginAuthenticateAsClient, AuthenticateAsServer. BeginAuthenticateAsServer