Cette page vous a-t-elle été utile ?
Votre avis sur ce contenu est important. N'hésitez pas à nous faire part de vos commentaires.
Vous avez d'autres commentaires ?
1500 caractères restants
EndReceive, méthode (IAsyncResult)
Collapse the table of content
Expand the table of content
Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte.
Traduction
Source

Socket.EndReceive, méthode (IAsyncResult)

Met fin à une lecture asynchrone en attente.

Espace de noms :  System.Net.Sockets
Assembly :  System (dans System.dll)

public int EndReceive(
	IAsyncResult asyncResult
)

Paramètres

asyncResult
Type : System.IAsyncResult
IAsyncResult qui stocke des informations d'état et toutes les données définies par l'utilisateur pour cette opération asynchrone.

Valeur de retour

Type : System.Int32
Nombre d'octets reçus.

ExceptionCondition
ArgumentNullException

asyncResult est null.

ArgumentException

asyncResult n'a pas été retourné par un appel à la méthode BeginReceive.

InvalidOperationException

EndReceive a été précédemment appelé pour la lecture asynchrone.

SocketException

Une erreur s'est produite lors de la tentative d'accès au socket. Pour plus d'informations, consultez la section Notes.

ObjectDisposedException

Socket a été fermé.

La méthode EndReceive termine l'opération de lecture asynchrone démarrée dans la méthode BeginReceive.

Avant d'appeler BeginReceive, vous devez créer une méthode de rappel qui implémente le délégué AsyncCallback. Cette méthode de rappel qui s'exécute dans un thread séparé est appelée par le système après que BeginReceive a été retourné. La méthode de rappel doit accepter le IAsyncResult retourné par la méthode BeginReceive en tant que paramètre.

À l'intérieur de la méthode de rappel, appelez la méthode AsyncState de IAsyncResult pour obtenir l'objet d'état passé à la méthode BeginReceive. Extrayez le Socket de réception de cet objet d'état. Après avoir obtenu Socket, vous pouvez appeler la méthode EndReceive pour terminer correctement l'opération de lecture et retourner le nombre d'octets lus.

La méthode EndReceive se bloque jusqu'à ce que les données soient disponibles. Si vous utilisez un protocole sans connexion, EndReceive lit le premier datagramme mis en file d'attente disponible dans la mémoire tampon réseau entrante. Si vous utilisez un protocole orienté connexion, la méthode EndReceive lit autant de données qu'il y en a de disponibles, jusqu'au nombre d'octets spécifié dans le paramètre size de la méthode BeginReceive. Si l'hôte distant arrête la connexion Socket avec la méthode Shutdown et si toutes les données disponibles ont été reçues, la méthode EndReceive se terminera immédiatement et retournera zéro octet.

Pour obtenir les données reçues, appelez la méthode AsyncState de IAsyncResult et extrayez la mémoire tampon contenue dans l'objet d'état obtenu.

Pour annuler un BeginReceive en attente, appelez la méthode Close.

RemarqueRemarque

Si vous recevez un SocketException, utilisez la propriété SocketException.ErrorCode pour obtenir le code d'erreur spécifique. Une fois que vous avez obtenu ce code, reportez-vous à la documentation sur les codes d'erreur de l'API Windows Sockets version 2 dans MSDN Library pour obtenir une description détaillée de l'erreur.

RemarqueRemarque

Toutes les E/S initialisées par un thread donné sont annulées à la sortie du thread. Une opération asynchrone en attente peut échouer si le thread est interrompu avant la fin de l'opération.

RemarqueRemarque

Ce membre génère des informations de traçage lorsque vous activez le traçage réseau dans votre application. Pour plus d'informations, consultez Network Tracing.

L'exemple de code suivant met fin à une lecture asynchrone en attente. Pour obtenir un exemple complet illustrant des communications asynchrones avec les sockets, consultez Socket Code Examples.


public static void Read_Callback(IAsyncResult ar){
	StateObject so = (StateObject) ar.AsyncState;
	Socket s = so.workSocket;

	int read = s.EndReceive(ar);

	if (read > 0) {
            so.sb.Append(Encoding.ASCII.GetString(so.buffer, 0, read));
            s.BeginReceive(so.buffer, 0, StateObject.BUFFER_SIZE, 0, 
            	                     new AsyncCallback(Async_Send_Receive.Read_Callback), so);
	}
	else{
	     if (so.sb.Length > 1) {
	          //All of the data has been read, so displays it to the console
	          string strContent;
	          strContent = so.sb.ToString();
	          Console.WriteLine(String.Format("Read {0} byte from socket" + 
	          	               "data = {1} ", strContent.Length, strContent));
	     }
	     s.Close();
	}
}


.NET Framework

Pris en charge dans : 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Ajouts de la communauté

AJOUTER
Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2015 Microsoft