Udostępnij za pośrednictwem


Socket.Disconnect(Boolean) Metoda

Definicja

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.

Dotyczy