Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Socket.BeginSend méthode (Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)

 

Date de publication : novembre 2016

Envoie de façon asynchrone des données à un groupe connecté Socket.

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

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public IAsyncResult BeginSend(
	byte[] buffer,
	int offset,
	int size,
	SocketFlags socketFlags,
	AsyncCallback callback,
	object state
)

Paramètres

buffer
Type: System.Byte[]

Tableau de type Byte qui contient les données à envoyer.

offset
Type: System.Int32

Position de base zéro dans le buffer paramètre auquel commencer l’envoi de données.

size
Type: System.Int32

Le nombre d’octets à envoyer.

socketFlags
Type: System.Net.Sockets.SocketFlags

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

callback
Type: System.AsyncCallback

Délégué AsyncCallback.

state
Type: System.Object

Objet qui contient les informations d’état de cette demande.

Valeur de retour

Type: System.IAsyncResult

Un IAsyncResult qui fait référence à l’envoi asynchrone.

Exception Condition
ArgumentNullException

buffer a la valeur null.

SocketException

Une erreur s’est produite pendant la tentative d’accès au socket. Consultez la section Notes ci-dessous.

ArgumentOutOfRangeException

offset est inférieur à 0.

ou

offset est inférieur à la longueur de buffer.

ou

size est inférieur à 0.

ou

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

ObjectDisposedException

Socket a été fermé.

Le BeginSend méthode démarre une opération d’envoi asynchrone à l’hôte distant établi dans la Connect, BeginConnect, Accept, ou BeginAccept (méthode). BeginSend lève une exception si vous n’appelez pas tout d’abord Accept, BeginAccept, Connect, ou BeginConnect. Appel de la BeginSend méthode vous donne la possibilité d’envoyer des données dans un thread d’exécution séparé.

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

Votre méthode de rappel doit appeler la EndSend méthode. Lorsque votre application appelle BeginSend, le système utilise un thread séparé pour exécuter la méthode de rappel spécifiée et se bloque sur EndSend jusqu'à ce que le Socket envoie le nombre d’octets demandé ou lève une exception. Si vous souhaitez que le thread d’origine se bloque après avoir appelé la BeginSend méthode, utilisez la WaitHandle.WaitOne méthode. Appelez la méthode Set sur un.ManualResetEvent dans la méthode de rappel lorsque vous souhaitez que le thread d’origine continuera à s’exécuter. Pour plus d’informations sur l’écriture de méthodes de rappel, consultez Marshaling a Delegate as a Callback Method.

Bien que destiné à des protocoles orientés connexion, BeginSend fonctionne également pour les protocoles sans connexion, si vous appelez d’abord la Connect ou BeginConnect méthode pour établir un hôte distant par défaut. Si vous utilisez un protocole sans connexion et un plan pour envoyer des données à plusieurs hôtes différents, vous devez utiliser BeginSendTo. Il est possible d’utiliser BeginSendTo même après avoir établi un hôte distant par défaut avec Connect. Vous pouvez également modifier l’hôte distant par défaut avant d’appeler BeginSend en effectuant un autre appel à Connect ou BeginConnect. Avec les protocoles sans connexion, vous devez également vous assurer que la taille de la mémoire tampon ne dépasse pas la taille de paquet maximale du fournisseur de service sous-jacent. Si c’est le cas, le datagramme n’enverra pas et BeginSend lèvera une SocketException.

Si vous spécifiez le DontRoute doivent être signalées comme le socketflags paramètre, les données que vous envoyez ne seront pas routés.

System_CAPS_noteRemarque

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

System_CAPS_noteRemarque

Toutes les e/s initialisées par un thread donné est annulée lors de la sortie du thread. Une opération asynchrone en attente peut échouer si le thread se termine avant la fin de l’opération.

System_CAPS_noteRemarque

state est une instanciation d’une classe définie par l’utilisateur.

System_CAPS_noteRemarque

L’achèvement d’un envoi n’indique pas que les données ont été correctement remises. Si aucun espace tampon n’est disponible dans le système de transport pour contenir les données à transmettre, envoi bloquera, sauf si le socket a été placé en mode non bloquant.

System_CAPS_noteRemarque

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 Traçage réseau dans le .NET Framework.

System_CAPS_noteRemarque

Le contexte d’exécution (le contexte de sécurité, l’utilisateur avec emprunt d’identité et le contexte d’appel) est mis en cache pour asynchrone Socket méthodes. Après la première utilisation d’un contexte particulier (une asynchrone spécifique Socket (méthode), son propre Socket instance et un rappel spécifique), les utilisations suivantes de ce contexte seront affiche une amélioration des performances.

L’exemple de code suivant démarre l’envoi asynchrone des données à un hôte distant.

allDone.Set();
Socket s = (Socket) ar.AsyncState;
s.EndConnect(ar);
StateObject so2 = new StateObject();
so2.workSocket = s;
byte[] buff = Encoding.ASCII.GetBytes("This is a test");
s.BeginSend(buff, 0, buff.Length,0,
                   new AsyncCallback(Async_Send_Receive.Send_Callback), so2);    

.NET Framework
Disponible depuis 1.1
Retour au début
Afficher: