Condividi tramite


Socket.Disconnect(Boolean) Metodo

Definizione

Chiude la connessione al socket consentendo di riutilizzare il socket.

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

Parametri

reuseSocket
Boolean

true se il socket può essere riutilizzato una volta chiusa la connessione in corso; in caso contrario, false.

Eccezioni

L'oggetto Socket è stato chiuso.

Si è verificato un errore durante il tentativo di accesso al socket.

Esempio

Nell'esempio di codice seguente viene creato un socket per la comunicazione sincrona e vengono inviati alcuni dati a un host remoto. Chiama quindi Shutdown, per arrestare l'attività di invio e ricezione e Disconnect, per chiudere la connessione 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");

Commenti

Se si usa un protocollo orientato alla connessione, è possibile usare questo metodo per chiudere il socket. Questo metodo termina la connessione e imposta la Connected proprietà su false. Tuttavia, se reuseSocket è true, è possibile riutilizzare il socket.

Per assicurarsi che tutti i dati vengano inviati e ricevuti prima della chiusura del socket, è necessario chiamare prima di chiamare Shutdown il Disconnect metodo .

Se è necessario chiamare senza prima chiamare DisconnectShutdown, è possibile impostare l'opzione DontLingerSocket su false e specificare un intervallo di timeout diverso da zero per assicurarsi che i dati accodati per la trasmissione in uscita vengano inviati. Disconnect blocca quindi fino a quando i dati non vengono inviati o fino alla scadenza del timeout specificato. Se si imposta su DontLingerfalse e si specifica un intervallo di timeout zero, Close rilascia la connessione e rimuove automaticamente i dati in coda in uscita.

Nota

Se si riceve un SocketExceptionoggetto , utilizzare la SocketException.ErrorCode proprietà per ottenere il codice di errore specifico. Dopo aver ottenuto questo codice, fare riferimento alla documentazione relativa al codice di errore dell'API Windows Sockets versione 2 per una descrizione dettagliata dell'errore.

Nota

Questo membro genera informazioni di traccia quando viene abilitata la funzionalità di traccia di rete nell'applicazione in uso. Per altre informazioni, vedere Traccia di rete in .NET Framework.

Si applica a