Socket.BeginDisconnect(Boolean, AsyncCallback, Object) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Rozpoczyna żądanie asynchroniczne, aby odłączyć się od zdalnego punktu końcowego.
public:
IAsyncResult ^ BeginDisconnect(bool reuseSocket, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginDisconnect (bool reuseSocket, AsyncCallback? callback, 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
Parametry
- reuseSocket
- Boolean
true jeśli to gniazdo można ponownie użyć po zamknięciu połączenia; w przeciwnym razie , false.
- callback
- AsyncCallback
Delegat AsyncCallback .
- state
- Object
Obiekt zawierający informacje o stanie dla tego żądania.
Zwraca
IAsyncResult Obiekt, który odwołuje się do operacji asynchronicznej.
Wyjątki
Socket Obiekt został zamknięty.
.NET Framework i .NET 5 i starsze tylko: wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Przykłady
Poniższy przykład kodu tworzy gniazdo do komunikacji asynchronicznej i wysyła dane do hosta zdalnego. Po wysłaniu danych jest wywoływana, Shutdown aby zatrzymać działanie wysyłania i odbierania. Następnie BeginDisconnect jest wywoływana, aby rozpocząć żądanie rozłączenia. Po zakończeniu żądania właściwość jest wysyłana do zapytania o sprawdzenie, Connected czy gniazdo jest rozłączone.
// 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();
}
Uwagi
Jeśli używasz protokołu zorientowanego na połączenie, możesz wywołać BeginDisconnect metodę , aby zażądać odłączenia od zdalnego punktu końcowego. Jeśli reuseSocket jest to true, możesz ponownie użyć gniazda.
Metoda BeginDisconnect używa oddzielnego wątku do wywoływania określonej metody wywołania zwrotnego. Metoda EndDisconnect blokuje czas oczekiwania na rozłączenie. Aby uzyskać dodatkowe informacje na temat pisania metod wywołania zwrotnego, zobacz Marshaling a Delegate as a Callback Method (Marshaling a Delegate as a Callback Method).
Uwaga
Jeśli wystąpi SocketException wyjątek, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu.
Uwaga
Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.