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
Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

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

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

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 paramètre buffer à laquelle commencer l'envoi des données.
size
Type : System.Int32
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 contenant les informations d'état de cette demande.

Valeur de retour

Type : System.IAsyncResult
IAsyncResult qui fait référence à l'envoi asynchrone.

ExceptionCondition
ArgumentNullException

buffer a la valeur null.

SocketException

Une erreur s'est produite lors de 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 du paramètre offset.

ObjectDisposedException

Socket a été fermé.

La méthode BeginSend démarre une opération d'envoi asynchrone à l'hôte distant établi dans la méthode Connect, BeginConnect, Accept ou BeginAccept. BeginSend lèvera une exception si vous n'appelez pas en premier Accept, BeginAccept, Connect ou BeginConnect. L'appel à la méthode BeginSend vous permet d'envoyer 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 BeginSend. 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 ou structure contenant Socket et les autres informations requises. Passez une instance de cette classe à la méthode BeginSend via le paramètre state.

Votre méthode de rappel doit appeler la méthode EndSend. 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 Socket envoie le nombre d'octets demandé ou lève une exception. Si vous voulez que le thread d'origine se bloque après que vous avez appelé la méthode BeginSend, utilisez la méthode 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.

Bien que destinée à des protocoles orientés connexion, la méthode BeginSend fonctionne également pour les protocoles sans connexion, à condition que vous appeliez tout d'abord la méthode Connect ou BeginConnect pour établir un hôte distant par défaut. Si vous utilisez un protocole sans connexion et si vous envisagez d'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 changer l'hôte distant par défaut avant d'appeler la méthode BeginSend en effectuant un autre appel à la méthode Connect ou BeginConnect. Avec les protocoles sans connexion, vous devez également vous assurer que la taille de votre mémoire tampon n'excède pas la taille de paquet maximale du fournisseur de services sous-jacent. Si tel est le cas, le datagramme n'est pas envoyé et BeginSend lève SocketException.

Si vous spécifiez l'indicateur DontRoute comme paramètre socketflags, les données que vous envoyez ne seront pas routées.

RemarqueRemarque

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.

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

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

RemarqueRemarque

Un envoi réussi n'indique pas que les données ont été correctement remises. Si aucun espace de mémoire tampon n'est disponible dans le système de transport pour transmettre les données, l'envoi sera bloqué à moins que le socket n'ait été placé en mode non bloquant.

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

RemarqueRemarque

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.

RemarqueRemarque

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.

L'exemple de code suivant démarre l'envoi asynchrone de 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

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

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

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
Afficher:
© 2015 Microsoft