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

Envoie le nombre spécifié d'octets de données à un Socket connecté, à l'aide du SocketFlags spécifié.

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

public int Send(
	byte[] buffer,
	int size,
	SocketFlags socketFlags
)

Paramètres

buffer
Type : System.Byte[]
Tableau de type Byte qui contient les données à envoyer.
size
Type : System.Int32
Nombre d'octets à envoyer.
socketFlags
Type : System.Net.Sockets.SocketFlags
Combinaison d'opérations de bits des valeurs SocketFlags.

Valeur de retour

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

ExceptionCondition
ArgumentNullException

buffer a la valeur null.

ArgumentOutOfRangeException

size est inférieur à 0 ou dépasse la taille de la mémoire tampon.

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 au socket. Pour plus d'informations, consultez la section Notes.

ObjectDisposedException

Socket a été fermé.

La méthode Send envoie de manière synchrone les données à l'hôte distant établi dans la méthode Connect ou Accept et retourne le nombre d'octets envoyés avec succès. Send peut être utilisé pour les protocoles orientés connexion et sans connexion.

Cette surcharge requiert une mémoire tampon contenant les données que vous voulez envoyer, le nombre d'octets à envoyer et une combinaison d'opérations de bits de tous les SocketFlags. 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 devez appeler Connect avant d'appeler cette méthode, sinon Send lève SocketException. Si vous utilisez un protocole orienté connexion, vous devez soit utiliser Connect pour établir une connexion d'hôte distant, soit utiliser Accept pour accepter une connexion entrante.

Si vous utilisez un protocole sans connexion et si vous envisagez d'envoyer des données à plusieurs hôtes différents, vous devez utiliser la méthode SendTo. Si vous n'utilisez pas la méthode SendTo, vous devez appeler la méthode Connect avant chaque appel à la méthode Send. Vous pouvez utiliser SendTo, 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 Send en effectuant un autre appel à la méthode Connect.

Avec un protocole orienté connexion, Send se bloque jusqu'à ce que le nombre d'octets demandé soit envoyé, à moins qu'un délai n'ait été défini à l'aide de Socket.SendTimeout. Si la valeur du délai d'attente a été dépassée, l'appel Send lève SocketException. En mode non-blocage, Send peut se terminer correctement, même si elle envoie un nombre inférieur au nombre d'octets demandé. 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 Send 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.

RemarqueRemarque

Vous devez 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 Send lève SocketException. 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

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.

L'exemple de code suivant envoie les données se trouvant dans la mémoire tampon et spécifie None pour SocketFlags.


// Displays sending with a connected socket
// using the overload that takes a buffer, message size, and socket flags.
public static int SendReceiveTest3(Socket server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try 
    {
        // Blocks until send returns.
        int i = server.Send(msg, msg.Length, SocketFlags.None);
        Console.WriteLine("Sent {0} bytes.", i);

        // Get reply from the server.
        int byteCount = server.Receive(bytes, server.Available, 
                                           SocketFlags.None);
        if (byteCount > 0)
            Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}


.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