Socket.BeginDisconnect(Boolean, AsyncCallback, Object) Methode

Definition

Beginnt eine asynchrone Anforderung zum Trennen der Verbindung mit einem Remoteendunkt.Begins an asynchronous request to disconnect from a remote endpoint.

public:
 IAsyncResult ^ BeginDisconnect(bool reuseSocket, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginDisconnect (bool reuseSocket, AsyncCallback callback, object state);
member this.BeginDisconnect : bool * AsyncCallback * obj -> IAsyncResult
Public Function BeginDisconnect (reuseSocket As Boolean, callback As AsyncCallback, state As Object) As IAsyncResult

Parameter

reuseSocket
Boolean

true, wenn dieser Socket wiederverwendet werden kann, nachdem die Verbindung geschlossen wurde, andernfalls false.true if this socket can be reused after the connection is closed; otherwise, false.

callback
AsyncCallback

Der AsyncCallback-Delegat.The AsyncCallback delegate.

state
Object

Ein Objekt mit Zustandsinformationen für diese Anforderung.An object that contains state information for this request.

Gibt zurück

Ein IAsyncResult-Objekt, das auf den asynchronen Vorgang verweist.An IAsyncResult object that references the asynchronous operation.

Ausnahmen

Das Betriebssystem ist Windows 2000 oder früher, für diese Methode ist jedoch Windows XP erforderlich.The operating system is Windows 2000 or earlier, and this method requires Windows XP.

Das Socket-Objekt wurde geschlossen.The Socket object has been closed.

Fehler beim Versuch, auf den Socket zuzugreifen.An error occurred when attempting to access the socket.

Beispiele

Das folgende Codebeispiel erstellt einen Socket für die asynchrone Kommunikation und sendet einige Daten an einen Remote Host.The following code example creates a socket for asynchronous communication and sends some data to a remote host. Wenn die Daten gesendet wurden, wird Shutdown aufgerufen, um die Sende-und Empfangs Aktivität anzuhalten.When the data has been sent, Shutdown is called to stop the send and receive activity. Anschließend wird BeginDisconnect aufgerufen, um eine Disconnect-Anforderung zu starten.Then BeginDisconnect is called to begin a disconnect request. Wenn die Anforderung abgeschlossen ist, wird die Connected-Eigenschaft abgefragt, um zu überprüfen, ob der Socket getrennt ist.When the request completes, the Connected property is queried to test whether the socket is disconnected.

      // 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 = gcnew IPEndPoint( ipAddress,11000 );

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

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

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

      // Send some data to the remote device.
      String^ data = "This is a string of data <EOF>";
      array<Byte>^buffer = Encoding::ASCII->GetBytes( data );
      client->BeginSend( buffer, 0, buffer->Length, static_cast<SocketFlags>(0), gcnew AsyncCallback( ClientSendCallback ), client );

      // Wait for send done.
      sendDone->WaitOne();

      // Release the socket.
      client->Shutdown( SocketShutdown::Both );
      client->BeginDisconnect( true, gcnew 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 = dynamic_cast<Socket^>(ar->AsyncState);
      client->EndDisconnect( ar );

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

public:

       // 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();
   }

Hinweise

Wenn Sie ein Verbindungs orientiertes Protokoll verwenden, können Sie die BeginDisconnect-Methode aufzurufen, um eine Trennung von einem Remote Endpunkt anzufordern.If you are using a connection-oriented protocol, you can call the BeginDisconnect method to request a disconnect from a remote endpoint. Wenn reuseSocket trueist, können Sie den Socket wieder verwenden.If reuseSocket is true, you can reuse the socket.

Die BeginDisconnect-Methode verwendet einen separaten Thread, um die angegebene Rückruf Methode aufzurufen.The BeginDisconnect method uses a separate thread to invoke the specified callback method. Die EndDisconnect-Methode blockiert, bis die ausstehende Trennung abgeschlossen ist.The EndDisconnect method blocks until the pending disconnect is complete. Weitere Informationen zum Schreiben von Rückruf Methoden finden Sie unter Mars Hallen eines Delegaten als Rückruf Methode.For additional information on writing callback methods, see Marshaling a Delegate as a Callback Method.

Hinweis

Wenn Sie eine SocketException Ausnahme erhalten, verwenden Sie die SocketException.ErrorCode-Eigenschaft, um den spezifischen Fehlercode abzurufen.If you receive a SocketException exception, use the SocketException.ErrorCode property to obtain the specific error code. Nachdem Sie diesen Code abgerufen haben, finden Sie in der API-Fehlercode Dokumentation der Windows Sockets, Version 2 , eine ausführliche Beschreibung des Fehlers.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Hinweis

Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren.This member outputs trace information when you enable network tracing in your application. Weitere Informationen finden Sie unter Netzwerk Ablauf Verfolgung in der .NET Framework.For more information, see Network Tracing in the .NET Framework.

Gilt für: