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, Int32, SocketFlags, SocketError)

 

Date de publication : novembre 2016

Envoie le nombre spécifié d’octets de données à un groupe connecté Socket, commençant à l’offset spécifié et utilisant le SocketFlags

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

public int Send(
	byte[] buffer,
	int offset,
	int size,
	SocketFlags socketFlags,
	out SocketError errorCode
)

Paramètres

buffer
Type: System.Byte[]

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

offset
Type: System.Int32

Position dans le tampon de données à partir duquel 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.

errorCode
Type: System.Net.Sockets.SocketError

Un SocketError objet qui stocke l’erreur de socket.

Valeur de retour

Type: System.Int32

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

Exception Condition
ArgumentNullException

buffer 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 de le offset paramètre.

SocketException

socketFlags n’est pas une combinaison valide de valeurs.

ou

Une erreur de système d’exploitation se produit pendant l’accès à la 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 spécifié dans le 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.

Dans cette surcharge, 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 uneSocketException. 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 SendTo. Si vous n’utilisez pas SendTo, vous devez appeler Connect avant chaque appel à Send. Il est possible d’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.

Vous devez également vous assurer de 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 utilisez 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

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

L’exemple de code suivant spécifie la mémoire tampon de données, un offset, une taille et SocketFlags pour l’envoi de données à un groupe connecté Socket.

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

        // Get reply from the server.
        byteCount = server.Receive(bytes, 0, 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 2.0
Retour au début
Afficher: