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
BeginReceiveFrom, méthode

Socket.BeginReceiveFrom, méthode

Mise à jour : novembre 2007

Démarre la réception asynchrone de données à partir d'un périphérique réseau spécifié.

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

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public IAsyncResult BeginReceiveFrom(
	byte[] buffer,
	int offset,
	int size,
	SocketFlags socketFlags,
	ref EndPoint remoteEP,
	AsyncCallback callback,
	Object state
)
/** @attribute HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true) */
public IAsyncResult BeginReceiveFrom(
	byte[] buffer,
	int offset,
	int size,
	SocketFlags socketFlags,
	/** @ref */EndPoint remoteEP,
	AsyncCallback callback,
	Object state
)
public function BeginReceiveFrom(
	buffer : byte[], 
	offset : int, 
	size : int, 
	socketFlags : SocketFlags, 
	remoteEP : EndPoint, 
	callback : AsyncCallback, 
	state : Object
) : IAsyncResult

Paramètres

buffer
Type : System.Byte[]

Tableau de type Byte qui est l'emplacement de stockage pour les données reçues.

offset
Type : System.Int32

Position de base zéro dans le paramètre buffer à laquelle stocker les données.

size
Type : System.Int32

Nombre d'octets à recevoir.

socketFlags
Type : System.Net.Sockets.SocketFlags

Combinaison d'opérations de bits des valeurs SocketFlags.

remoteEP
Type : System.Net.EndPoint%

EndPoint qui représente la source des données.

callback
Type : System.AsyncCallback

Délégué AsyncCallback.

state
Type : System.Object

Objet contenant les informations d'état de cette demande.

Valeur de retour

Type : System.IAsyncResult

IAsyncResult qui fait référence à la lecture asynchrone.

ExceptionCondition
ArgumentNullException

buffer est null.

– ou –

remoteEP est null.

SocketException

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

ArgumentOutOfRangeException

offset est inférieur à 0.

– ou –

offset est supérieur à la longueur de buffer.

– ou –

size est inférieur à 0.

– ou –

size est supérieur à la longueur de buffer moins la valeur du paramètre offset.

ObjectDisposedException

Socket a été fermé.

SecurityException

Un appelant situé plus haut dans la pile des appels n'a pas l'autorisation pour l'opération demandée.

Remarque :

L'attribut HostProtectionAttribute appliqué à ce type ou membre a la valeur de propriété Resources suivante : ExternalThreading. HostProtectionAttribute n'affecte pas les applications bureautiques (qui sont généralement démarrées en double-cliquant sur une icône, en tapant une commande ou en entrant une URL dans un navigateur). Pour plus d'informations, consultez la classe HostProtectionAttribute ou Attributs de programmation et de protection des hôtes SQL Server.

La méthode BeginReceiveFrom démarre de manière asynchrone la lecture des datagrammes sans connexion à partir d'un hôte distant. L'appel à la méthode BeginReceiveFrom vous permet de recevoir les données dans un thread d'exécution séparé.

Vous pouvez créer une méthode de rappel qui implémente le délégué AsyncCallback et passe son nom à la méthode BeginReceiveFrom. Pour ce faire, au minimum, votre paramètre state doit contenir le Socket connecté ou par défaut utilisé pour la communication. Si votre rappel a besoin d'informations supplémentaires, vous pouvez créer une petite classe contenant Socket et les autres informations requises. Passez une instance de cette classe à la méthode BeginReceiveFrom via le paramètre state.

Votre méthode de rappel doit appeler la méthode EndReceiveFrom. Lorsque votre application appelle la méthode BeginReceiveFrom, le système utilise un thread séparé pour exécuter la méthode de rappel spécifiée et se bloque sur la méthode EndReceiveFrom jusqu'à ce que Socket lise les données ou lève une exception. Si vous voulez que le thread d'origine se bloque après que vous avez appelé la méthode BeginReceiveFrom, utilisez WaitHandle.WaitOne. Appelez la méthode Set sur un T:System.Threading.ManualResetEvent dans la méthode de rappel lorsque vous souhaitez que le thread d'origine continue à s'exécuter. Pour plus d'informations sur l'écriture de méthodes de rappel, consultez Callback, exemple.

Remarque :

Avant d'appeler la méthode BeginReceiveFrom, vous devez lier explicitement Socket à un point de terminaison local à l'aide de la méthode Bind, sinon la méthode BeginReceiveFrom lève SocketException.

Cette méthode lit les données dans le paramètre buffer et capture le point de terminaison de l'hôte distant à partir duquel sont envoyées les données. Pour obtenir des informations sur la récupération de ce point de terminaison, consultez la méthode EndReceiveFrom. Cette méthode est particulièrement utile si vous avez l'intention de recevoir de manière asynchrone des datagrammes sans connexion d'un hôte inconnu ou de plusieurs hôtes. Dans ce cas, la méthode BeginReceiveFrom lit le premier datagramme mis en file d'attente reçu dans la mémoire tampon réseau locale. Si la taille du datagramme reçu est supérieure à celle de buffer, la méthode BeginReceiveFrom remplit buffer avec le plus grand nombre possible de messages et lève SocketException. Si vous utilisez un protocole non fiable, les données excédentaires seront perdues. Si vous utilisez un protocole fiable, les données excédentaires sont conservées par le fournisseur de services et vous pouvez les récupérer en appelant la méthode BeginReceiveFrom avec une mémoire tampon de taille suffisante.

Bien que BeginReceiveFrom soit destiné aux protocoles sans connexion, vous pouvez également utiliser un protocole orienté connexion. Dans ce cas, vous devez préalablement établir une connexion d'hôte distant en appelant la méthode Connect / BeginConnect ou bien accepter une demande de connexion entrante en appelant la méthode Accept ou BeginAccept. Si vous appelez la méthode BeginReceiveFrom avant d'établir ou d'accepter une connexion, vous obtiendrez SocketException. Vous pouvez également établir un hôte distant par défaut pour un protocole sans connexion avant d'appeler la méthode BeginReceiveFrom. Dans l'un ou l'autre de ces cas, la méthode BeginReceiveFrom ignore le paramètre remoteEP et reçoit seulement les données de l'hôte distant connecté ou par défaut.

Avec des sockets orientés connexion, BeginReceiveFrom lit autant de données qu'il y en a de disponibles, jusqu'au nombre d'octets spécifié par le paramètre size.

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

Remarque :

Si vous recevez 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.

Remarque :

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.

Remarque :

Le contexte d'exécution (le contexte de sécurité, l'utilisateur personnifié et le contexte d'appel) est mis en cache pour les méthodes Socket asynchrones. Après la première utilisation d'un contexte particulier (une méthode Socket asynchrone spécifique, une instance de Socket spécifique et un rappel spécifique), on constatera une amélioration des performances lors des utilisations suivantes de ce contexte.

L'exemple de code suivant reçoit de façon asynchrone des datagrammes sans connexion à partir d'un hôte distant.

	IPHostEntry lipa = Dns.Resolve("host.contoso.com");
	IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], 11000);

       Socket s = new Socket(lep.Address.AddressFamily,
       	                           SocketType.Dgram,
                                         ProtocolType.Udp);

       IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
       EndPoint tempRemoteEP = (EndPoint)sender;
       s.Connect(sender);

       try{
            while(true){
                 allDone.Reset();
                 StateObject so2 = new StateObject();
                 so2.workSocket = s;
                 Console.WriteLine("Attempting to Receive data from host.contoso.com");

                 s.BeginReceiveFrom(so2.buffer, 0, StateObject.BUFFER_SIZE,0, ref tempRemoteEP,
	                                   new AsyncCallback(Async_Send_Receive.ReceiveFrom_Callback), so2);	
                 allDone.WaitOne();
            }
       }
       catch (Exception e){
            Console.WriteLine(e.ToString());
       }


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professionnel Édition x64, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile pour Smartphone, Windows Mobile pour Pocket PC

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

.NET Framework

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

.NET Compact Framework

Pris en charge dans : 3.5, 2.0, 1.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft