Socket.Disconnect(Boolean) 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.
Zamyka połączenie gniazda i umożliwia ponowne użycie gniazda.
public:
void Disconnect(bool reuseSocket);
public void Disconnect (bool reuseSocket);
member this.Disconnect : bool -> unit
Public Sub Disconnect (reuseSocket As Boolean)
Parametry
- reuseSocket
- Boolean
true
jeśli to gniazdo można ponownie użyć po zamknięciu bieżącego połączenia; w przeciwnym razie , false
.
Wyjątki
Socket Obiekt został zamknięty.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Przykłady
Poniższy przykład kodu tworzy gniazdo do komunikacji synchronicznej i wysyła dane do hosta zdalnego. Następnie wywołuje metodę Shutdown, aby zatrzymać działanie wysyłania i odbierania oraz Disconnect, aby zamknąć połączenie gniazda.
IPHostEntry^ ipHost = Dns::GetHostEntry( Dns::GetHostName() );
IPAddress^ ipAddr = ipHost->AddressList[ 0 ];
IPEndPoint^ ipEndPoint = gcnew IPEndPoint( ipAddr,11000 );
Socket^ client = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
// Connect the socket to the remote end point.
client->Connect( ipEndPoint );
// Send some data to the remote device.
String^ data = "This is a string of data <EOF>";
array<Byte>^buffer = Encoding::ASCII->GetBytes( data );
int bytesTransferred = client->Send( buffer );
// Write to the console the number of bytes transferred.
Console::WriteLine( "{0} bytes were sent.\n", bytesTransferred );
// Release the socket.
client->Shutdown( SocketShutdown::Both );
client->Disconnect( true );
if ( client->Connected )
Console::WriteLine( "We're still connnected" );
else
Console::WriteLine( "We're disconnected" );
IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddr = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);
Socket client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
// Connect the socket to the remote end point.
client.Connect(ipEndPoint);
// Send some data to the remote device.
string data = "This is a string of data <EOF>";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int bytesTransferred = client.Send(buffer);
// Write to the console the number of bytes transferred.
Console.WriteLine("{0} bytes were sent.\n", bytesTransferred);
// Release the socket.
client.Shutdown(SocketShutdown.Both);
client.Disconnect(true);
if (client.Connected)
Console.WriteLine("We're still connnected");
else
Console.WriteLine("We're disconnected");
Uwagi
Jeśli używasz protokołu zorientowanego na połączenie, możesz użyć tej metody, aby zamknąć gniazdo. Ta metoda kończy połączenie i ustawia Connected właściwość na false
. Jeśli jednak jest to true
, reuseSocket
możesz ponownie użyć gniazda.
Aby upewnić się, że wszystkie dane są wysyłane i odbierane przed zamknięciem gniazda, należy wywołać metodę Disconnect przed wywołaniem Shutdown metody .
Jeśli musisz wywołać połączenie bez pierwszego wywołania DisconnectShutdown, możesz ustawić DontLingerSocket opcję false
na wartość i określić interwał limitu czasu bezzerowego, aby upewnić się, że dane w kolejce do transmisji wychodzącej są wysyłane.
Disconnect następnie blokuje do momentu wysłania danych lub do momentu wygaśnięcia określonego limitu czasu. Jeśli ustawisz DontLingerfalse
wartość i określisz zerowy interwał limitu czasu, Close zwalnia połączenie i automatycznie odrzuca wychodzące dane w kolejce.
Uwaga
Jeśli zostanie wyświetlony element SocketException, 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 gniazda systemu Windows 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.