SslStream.EndRead(IAsyncResult) Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Befejez egy aszinkron olvasási műveletet, amely egy korábbi hívással kezdődött.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
Paraméterek
- asyncResult
- IAsyncResult
Egy IAsyncResult példány, amelyet egy hívás adott vissza.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)
Válaszok
Az Int32 alapul szolgáló streamből beolvasott bájtok számát meghatározó érték.
Kivételek
asyncResult az null.
asyncResult nem a következő BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)hívás hozta létre: .
Nincs függőben lévő olvasási művelet.
-vagy-
A hitelesítés nem történt meg.
Az olvasási művelet nem sikerült.
Példák
Az alábbi példakód egy aszinkron olvasási művelet befejezését mutatja be.
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
Megjegyzések
Ha a művelet nem fejeződött be, ez a metódus addig blokkolja a műveletet, amíg meg nem teszi.
A művelet szinkron végrehajtásához használja a metódust Read .
Ezt a metódust csak a sikeres hitelesítés után hívhatja meg. Az egyik metódus AuthenticateAsClientBeginAuthenticateAsClientAuthenticateAsServer meghívásának BeginAuthenticateAsServerhitelesítéséhez.