Comparteix a través de


Socket.Disconnect(Boolean) Método

Definición

Cierra la conexión del socket y permite reutilizarlo.

public:
 void Disconnect(bool reuseSocket);
public void Disconnect (bool reuseSocket);
member this.Disconnect : bool -> unit
Public Sub Disconnect (reuseSocket As Boolean)

Parámetros

reuseSocket
Boolean

true si se puede reutilizar el socket una vez cerrada la conexión actual; de lo contrario, false.

Excepciones

El objeto Socket se ha cerrado.

Error al intentar acceder al socket.

Ejemplos

En el ejemplo de código siguiente se crea un socket para la comunicación sincrónica y se envían algunos datos a un host remoto. A continuación, llama Shutdowna , para detener la actividad de envío y recepción, y Disconnect, para cerrar la conexión de socket.

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");

Comentarios

Si usa un protocolo orientado a la conexión, puede usar este método para cerrar el socket. Este método finaliza la conexión y establece la Connected propiedad en false. Sin embargo, si reuseSocket es true, puede reutilizar el socket.

Para asegurarse de que todos los datos se envían y reciben antes de cerrar el socket, debe llamar a Shutdown antes de llamar al Disconnect método .

Si necesita llamar a sin llamar Disconnect primero Shutdowna , puede establecer la DontLingerSocket opción false en y especificar un intervalo de tiempo de espera distinto de cero para asegurarse de que se envían los datos en cola para la transmisión saliente. Disconnect a continuación, se bloquea hasta que se envíen los datos o hasta que expire el tiempo de espera especificado. Si establece DontLingerfalse en y especifica un intervalo de tiempo de espera cero, Close libera la conexión y descarta automáticamente los datos en cola salientes.

Nota

Si recibe un SocketException, use la SocketException.ErrorCode propiedad para obtener el código de error específico. Después de obtener este código, consulte la documentación del código de error de la API de Windows Sockets versión 2 para obtener una descripción detallada del error.

Nota

Este miembro genera información de seguimiento cuando se habilita el seguimiento de red en la aplicación. Para obtener más información, vea Seguimiento de red en .NET Framework.

Se aplica a