Exporter (0) Imprimer
Développer tout
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

Socket.BeginDisconnect, méthode

Mise à jour : novembre 2007

Lance une demande asynchrone de déconnexion d'un point de terminaison distant.

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

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public IAsyncResult BeginDisconnect(
	bool reuseSocket,
	AsyncCallback callback,
	Object state
)
/** @attribute HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true) */
public IAsyncResult BeginDisconnect(
	boolean reuseSocket,
	AsyncCallback callback,
	Object state
)
public function BeginDisconnect(
	reuseSocket : boolean, 
	callback : AsyncCallback, 
	state : Object
) : IAsyncResult

Paramètres

reuseSocket
Type : System.Boolean

true si ce socket peut être réutilisé après la fermeture de la connexion ; sinon, false.

callback
Type : System.AsyncCallback

Délégué AsyncCallback.

state
Type : System.Object

Objet contenant les informations d'état de cette demande.

Valeur de retour

Type : System.IAsyncResult

Objet IAsyncResult qui fait référence à l'opération asynchrone.

ExceptionCondition
NotSupportedException

Le système d'exploitation est Windows 2000 ou une version antérieure, alors que cette méthode nécessite Windows XP.

ObjectDisposedException

L'objet Socket a été fermé.

SocketException

Une erreur s'est produite lors de la tentative d'accès au socket. Pour plus d'informations, consultez la section Notes.

Remarque :

L'attribut HostProtectionAttribute appliqué à ce type ou membre a la valeur de propriété Resources suivante : ExternalThreading. HostProtectionAttribute n'affecte pas les applications bureautiques (qui sont généralement démarrées en double-cliquant sur une icône, en tapant une commande ou en entrant une URL dans un navigateur). Pour plus d'informations, consultez la classe HostProtectionAttribute ou Attributs de programmation et de protection des hôtes SQL Server.

Si vous utilisez un protocole orienté connexion, vous pouvez appeler la méthode BeginDisconnect pour demander la déconnexion d'un point de terminaison distant. Si reuseSocket est true, vous pouvez réutiliser le socket.

La méthode BeginDisconnect utilise un thread séparé pour appeler la méthode de rappel spécifiée. La méthode EndDisconnect est bloquée aussi longtemps que la déconnexion en attente n'est pas terminée. Pour plus d'informations sur l'écriture de méthodes de rappel, consultez Callback, exemple.

Remarque :

Si vous recevez une exception 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.

Remarque :

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 Network Tracing.

L'exemple de code suivant crée un socket pour la communication asynchrone et envoie des données à un hôte distant. Une fois les données envoyées, Shutdown est appelé pour arrêter l'activité d'envoi et de réception. Ensuite, BeginDisconnect est appelé pour lancer une demande de déconnexion. Une fois la demande terminée, la propriété Connected est interrogée pour tester si le socket est déconnecté.

    // Establish the remote endpoint for the socket.
    // For this example use local computer.
    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();

    // Send some data to the remote device.
    string data = "This is a string of data <EOF>";
    byte[] buffer = Encoding.ASCII.GetBytes(data);
    client.BeginSend(buffer, 0, buffer.Length, 0, new AsyncCallback(ClientSendCallback), client);
    // Wait for send done.
    sendDone.WaitOne();

    // Release the socket.
    client.Shutdown(SocketShutdown.Both);
    client.BeginDisconnect(true, new AsyncCallback(DisconnectCallback), client);

    // Wait for the disconnect to complete.
    disconnectDone.WaitOne();
    if (client.Connected)
        Console.WriteLine("We're still connected");
    else
        Console.WriteLine("We're disconnected");
}


private static void DisconnectCallback(IAsyncResult ar)
{ 
    // Complete the disconnect request.
    Socket client = (Socket) ar.AsyncState;
    client.EndDisconnect(ar);

    // Signal that the disconnect is complete.
    disconnectDone.Set();
}



    // Establish the remote endpoint for the socket.
    // For this example use local computer.
    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
    IPAddress ipAddress = ipHostInfo.get_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();
    // Send some data to the remote device.
    String data = "This is a string of data <EOF>";
    ubyte buffer[] = Encoding.get_ASCII().GetBytes(data);
    client.BeginSend(buffer, 0, buffer.get_Length(), (SocketFlags)0,
        new AsyncCallback(ClientSendCallback), client);
    // Wait for send done.
    sendDone.WaitOne();
    // Release the socket.
    client.Shutdown(SocketShutdown.Both);
    client.BeginDisconnect(true, new AsyncCallback(DisconnectCallback),
        client);
    // Wait for the disconnect to complete.
    disconnectDone.WaitOne();
    if (client.get_Connected()) {
        Console.WriteLine("We're still connected");
    }
    else {
        Console.WriteLine("We're disconnected");
    }
} //ClientDisconnect

private static void DisconnectCallback(IAsyncResult ar)
{
    // Complete the disconnect request.
    Socket client = (Socket)ar.get_AsyncState();
    client.EndDisconnect(ar);
    // Signal that the disconnect is complete.
    disconnectDone.Set();
} //DisconnectCallback


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professionnel Édition x64, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

.NET Framework

Pris en charge dans : 3.5, 3.0, 2.0
Cela vous a-t-il été utile ?
(1500 caractères restants)
Merci pour vos suggestions.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft. Tous droits réservés.