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.EndSendFile méthode (IAsyncResult)

 

Date de publication : novembre 2016

Met fin à un envoi asynchrone en attente d’un fichier.

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

public void EndSendFile(
	IAsyncResult asyncResult
)

Paramètres

asyncResult
Type: System.IAsyncResult

Un IAsyncResult objet qui stocke les informations d’état pour cette opération asynchrone.

Exception Condition
NotSupportedException

Windows NT est requis pour cette méthode.

ObjectDisposedException

Le Socket objet a été fermé.

ArgumentNullException

asyncResult est vide.

ArgumentException

asyncResult n’a pas été retourné par un appel à la BeginSendFile (méthode).

InvalidOperationException

EndSendFile a été appelé précédemment pour asynchrone BeginSendFile.

SocketException

Une erreur s’est produite lors de la tentative d’accès au socket. Consultez la section Notes ci-dessous.

EndSendFile termine l’opération d’envoi asynchrone démarrée BeginSendFile.

Avant d’appeler BeginSendFile, vous devez créer une méthode de rappel qui implémente le AsyncCallback déléguer. Cette méthode de rappel s’exécute dans un thread distinct et est appelée par le système après que BeginSendFile retourne. La méthode de rappel doit accepter le IAsyncResult objet retourné par la BeginSendFile méthode en tant que paramètre.

Dans la méthode de rappel, appelez la AsyncState méthode de le IAsyncResult paramètre pour obtenir l’envoi Socket. Après avoir obtenu le Socket, vous pouvez appeler la EndSendFile méthode se termine avec succès de l’opération d’envoi.

Si vous utilisez un protocole sans connexion, EndSendFile bloque jusqu'à ce que le datagramme soit envoyé. Si vous utilisez un protocole orienté connexion, EndSendFile bloque jusqu'à ce que le fichier entier est envoyé. Il n’existe 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 BeginSendFile 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

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 crée et connecte à un socket pour la communication asynchrone et commence à envoyer le fichier « text.txt » en mode asynchrone à l’hôte distant. Le délégué de rappel appelle EndSendFile pour terminer la transmission.

public static void AsynchronousFileSend()
{
    // Send a file to a remote device.

    // Establish the remote endpoint for the socket.
    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
    IPAddress ipAddress = ipHostInfo.AddressList[0];
    IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);

    // Create a TCP/IP socket.
    Socket client = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream, ProtocolType.Tcp);

    // Connect to the remote endpoint.
    client.BeginConnect(remoteEP, 
        new AsyncCallback(ConnectCallback), client);

    // Wait for connect.
    connectDone.WaitOne();

    // There is a text file test.txt in the root directory.
    string fileName = "C:\\test.txt";

    // Send file fileName to the remote device.
    Console.WriteLine(fileName);
    client.BeginSendFile(fileName, new AsyncCallback(FileSendCallback), client);

    // Release the socket.
    client.Shutdown(SocketShutdown.Both);
    client.Close();
}


private static void FileSendCallback(IAsyncResult ar)
{
    // Retrieve the socket from the state object.
    Socket client = (Socket) ar.AsyncState;

    // Complete sending the data to the remote device.
    client.EndSendFile(ar);
    sendDone.Set();
}

.NET Framework
Disponible depuis 2.0
Retour au début
Afficher: