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

 

Date de publication : novembre 2016

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

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

Le 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

Le nombre d’octets envoyés à le Socket.

Exception Condition
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 valide de valeurs.

ou

Une erreur de système d’exploitation se produit lors de l’accès au socket. Pour plus d'informations, consultez la section Notes.

ObjectDisposedException

Socket a été fermé.

Send envoie de façon synchrone des données à l’hôte distant établi dans les Connect ou Accept (méthode) et retourne le nombre d’octets envoyé avec succès. Send peut être utilisé pour les protocoles orientés connexion et sans connexion.

Cette surcharge requiert une mémoire tampon qui contient les données que vous souhaitez envoyer, le nombre d’octets à envoyer et une combinaison d’opérations de bits SocketFlags. 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.

Si vous utilisez un protocole sans connexion, vous devez appeler Connect avant d’appeler cette méthode, ou Send lèvera une SocketException. Si vous utilisez un protocole orienté connexion, vous devez utiliser Connect pour établir une connexion d’hôte distant ou utilisez Accept pour accepter une connexion entrante.

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

Avec un protocole orienté connexion, Send se bloque jusqu'à ce que le nombre d’octets demandés est envoyé, sauf si un délai d’attente a été définie à l’aide de Socket.SendTimeout. Si la valeur de délai d’attente a été dépassée, le Send appel lèvera une SocketException. En mode non bloquant, Send peut se terminer correctement, même si elle envoie inférieur au nombre d’octets demandé. Il incombe de votre application pour suivre le nombre d’octets envoyés et de recommencer l’opération jusqu'à ce que l’application envoie le nombre d’octets demandé. Il n’existe également aucune garantie que les données envoyées apparaîtront sur le réseau immédiatement. Pour augmenter l’efficacité du réseau, le système sous-jacent peut retarder la transmission jusqu'à ce qu’une quantité significative de données sortantes est collectée. Une fin correcte de la Send méthode signifie que le système sous-jacent a eu suffisamment d’espace tampon envoyer vos données d’un réseau.

System_CAPS_noteRemarque

Vous devez vous assurer que la taille 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 Send lèvera une SocketException. 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

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.

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
Disponible depuis 1.1
Retour au début
Afficher: