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.SendTo, méthode (Byte[], Int32, Int32, SocketFlags, EndPoint)

Envoie le nombre spécifié d'octets de données au point de terminaison spécifié, en commençant à l'emplacement spécifié dans la mémoire tampon et en utilisant le SocketFlags spécifié.

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

public int SendTo(
	byte[] buffer,
	int offset,
	int size,
	SocketFlags socketFlags,
	EndPoint remoteEP
)

Paramètres

buffer
Type : System.Byte[]
Tableau de type Byte qui contient les données à envoyer.
offset
Type : System.Int32
Position dans la mémoire tampon de données à laquelle commencer l'envoi de 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.
remoteEP
Type : System.Net.EndPoint
EndPoint qui représente l'emplacement de destination des données.

Valeur de retour

Type : System.Int32
Nombre d'octets envoyés.

ExceptionCondition
ArgumentNullException

buffer a la valeur null.

ou

remoteEP a la valeur null.

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.

SocketException

socketFlags n'est pas une combinaison de valeurs valide.

ou

Une erreur du système d'exploitation s'est produite lors de l'accès à Socket. Pour plus d'informations, consultez la section Notes.

ObjectDisposedException

Socket a été fermé.

SecurityException

Un appelant de la pile des appels ne dispose pas des autorisations requises.

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

Si vous utilisez un protocole sans connexion, vous n'avez pas besoin d'établir un hôte distant par défaut avec la méthode Connect avant d'appeler la méthode SendTo. Cela est nécessaire uniquement si vous avez l'intention d'appeler la méthode Send. Si vous appelez la méthode Connect avant d'appeler la méthode SendTo, le paramètre remoteEP se substitue à l'hôte distant par défaut spécifié pour cette opération d'envoi seulement. En outre, il n'est pas nécessaire d'appeler la méthode Bind car le fournisseur de services sous-jacent assigne l'adresse réseau locale et le numéro de port les plus appropriés. Si vous devez identifier l'adresse réseau locale et le numéro de port assignés, vous pouvez utiliser la propriété LocalEndPoint après que la méthode SendTo s'est terminée correctement.

Bien que destiné aux protocoles sans connexion, SendTo fonctionne également avec les protocoles orientés connexion. Si vous utilisez un protocole orienté connexion, vous devez préalablement établir une connexion d'hôte distant en appelant la méthode Connect ou accepter une demande de connexion entrante à l'aide de la méthode Accept. Si vous n'établissez pas ou n'acceptez pas une connexion d'hôte distant, la méthode SendTo lève SocketException. Vous pouvez également établir un hôte distant par défaut pour un protocole sans connexion avant d'appeler la méthode SendTo. Dans l'un ou l'autre de ces cas, la méthode SendTo ignore le paramètre remoteEP et envoie seulement les données à l'hôte distant connecté ou par défaut.

Les sockets bloquants se bloquent jusqu'à ce que le nombre d'octets demandé soit envoyé. Compte tenu qu'un Socket non bloquant se termine immédiatement, il peut ne pas envoyer tous les octets demandés en une seule opération. Votre application est chargée de conserver la trace du nombre d'octets envoyés et de recommencer l'opération jusqu'à ce que l'application envoie le nombre d'octets demandé. En outre, il n'est pas garanti que les données envoyées apparaîtront sur le réseau immédiatement. Pour accroître l'efficacité du réseau, le système sous-jacent peut retarder la transmission jusqu'à ce qu'une quantité significative de données sortantes soit collectée. Une fin correcte de la méthode SendTo signifie que le système sous-jacent a eu suffisamment d'espace pour mettre vos données en mémoire tampon pour un envoi réseau.

Si vous utilisez un protocole sans connexion en mode blocage, la méthode SendTo se bloque jusqu'à ce que le datagramme soit envoyé. Si vous voulez envoyer des données à une adresse de diffusion, vous devez préalablement appeler la méthode SetSocketOption et définir l'option de socket en lui assignant le champ SocketOptionName.Broadcast. Vous devez également vous assurer que la taille 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 SendTo lève SocketException.

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

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.

L'exemple de code suivant envoie un datagramme sans connexion à l'hôte distant spécifié. L'offset, la taille et SocketFlags sont passés à la méthode SendTo.


    public static void SendTo4()
    {
        IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
        IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);

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

        byte[] msg = Encoding.ASCII.GetBytes("This is a test");
        Console.WriteLine("Sending data.");
        // This call blocks. 
        s.SendTo(msg, 0, msg.Length, SocketFlags.None, endPoint);
        s.Close();
    }



.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:
© 2014 Microsoft