Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método NetworkStream.EndRead (IAsyncResult)

 

Publicado: octubre de 2016

Controla el final de una lectura asincrónica.

Espacio de nombres:   System.Net.Sockets
Ensamblado:  System (en System.dll)

public override int EndRead(
	IAsyncResult asyncResult
)

Parámetros

asyncResult
Type: System.IAsyncResult

Un IAsyncResult que representa una llamada asincrónica.

Valor devuelto

Type: System.Int32

El número de bytes leídos de la NetworkStream.

Exception Condition
ArgumentException

El parámetro asyncResult es null.

IOException

Subyacente Socket se cierra.

O bien

Se produjo un error al acceder al socket. Vea la sección Comentarios para obtener más información.

ObjectDisposedException

La clase NetworkStream está cerrada.

El EndRead método completa la operación de lectura asincrónica iniciada el BeginRead (método).

Antes de llamar a BeginRead, deberá crear un método de devolución de llamada que implementa el AsyncCallback delegar. Este método de devolución de llamada se ejecuta en un subproceso independiente y es llamado por el sistema después de BeginRead devuelve. El método de devolución de llamada debe aceptar el IAsyncResult devuelto desde el BeginRead método como parámetro.

Dentro del método de devolución de llamada, llame a la AsyncState propiedad de la IAsyncResult para obtener el objeto de estado pasado a la BeginRead (método). Extraer la recepción NetworkStream de este objeto de estado. Después de obtener la NetworkStream, llame a la EndRead método para completar la operación de lectura y devolver el número de bytes leídos correctamente.

El EndRead método se bloquea hasta que haya datos disponibles. El EndRead método lee tantos datos como haya disponibles hasta llegar al número de bytes especificado en el size parámetro de la BeginRead (método). Si el host remoto se apaga el Socket se ha recibido la conexión y todos los datos disponibles, el EndRead método finaliza inmediatamente y devuelve cero bytes.

Para obtener los datos recibidos, llame a la AsyncState propiedad de la IAsyncResult, y extraiga el búfer que contiene el objeto de estado resultante.

System_CAPS_noteNota

Si recibe un IOException, compruebe la InnerException propiedad para determinar si fue provocada por una SocketException. Si es así, utilice el ErrorCode propiedad para obtener el código de error concreto y consulte en MSDN la documentación de los códigos de error de la API Windows Sockets versión 2 para obtener una descripción detallada del error.

En el ejemplo de código siguiente, myReadCallback se proporciona para BeginRead como método de devolución de llamada. EndRead se implementa en myReadCallback completar la asincrónica de lectura llamada iniciada por BeginRead.

// Example of EndRead, DataAvailable and BeginRead.

public static void myReadCallBack(IAsyncResult ar ){

    NetworkStream myNetworkStream = (NetworkStream)ar.AsyncState;
    byte[] myReadBuffer = new byte[1024];
    String myCompleteMessage = "";
    int numberOfBytesRead;

    numberOfBytesRead = myNetworkStream.EndRead(ar);
    myCompleteMessage = 
        String.Concat(myCompleteMessage, Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead));    

    // message received may be larger than buffer size so loop through until you have it all.
    while(myNetworkStream.DataAvailable){

        myNetworkStream.BeginRead(myReadBuffer, 0, myReadBuffer.Length, 
        	                                       new AsyncCallback(NetworkStream_ASync_Send_Receive.myReadCallBack), 
        	                                       myNetworkStream);  

    }

    // Print out the received message to the console.
    Console.WriteLine("You received the following message : " +
                                myCompleteMessage);
}

.NET Framework
Disponible desde 1.1
Volver al principio
Mostrar: