Freigeben über


Socket.Disconnect(Boolean) Methode

Definition

Schließt die Socketverbindung und ermöglicht die Wiederverwendung des Sockets.

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

Parameter

reuseSocket
Boolean

true, wenn dieser Socket wiederverwendet werden kann, nachdem die aktuelle Verbindung geschlossen wurde, andernfalls false.

Ausnahmen

Das Socket-Objekt wurde geschlossen.

Fehler beim Versuch, auf den Socket zuzugreifen.

Beispiele

Im folgenden Codebeispiel wird ein Socket für die synchrone Kommunikation erstellt und einige Daten an einen Remotehost gesendet. Anschließend wird aufgerufen Shutdown, um die Sende- und Empfangsaktivität zu beenden, und Disconnect, um die Socketverbindung zu schließen.

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

Hinweise

Wenn Sie ein verbindungsorientiertes Protokoll verwenden, können Sie diese Methode verwenden, um den Socket zu schließen. Diese Methode beendet die Verbindung und legt die Connected -Eigenschaft auf fest false. Wenn reuseSocket jedoch ist true, können Sie den Socket wiederverwenden.

Um sicherzustellen, dass alle Daten gesendet und empfangen werden, bevor der Socket geschlossen wird, sollten Sie vor dem Aufrufen der Disconnect -Methode aufrufenShutdown.

Wenn Sie aufrufen Disconnect müssen, ohne zuerst aufzurufen Shutdown, können Sie die DontLingerSocket Option auf false festlegen und ein Timeoutintervall ungleich null angeben, um sicherzustellen, dass daten, die für die ausgehende Übertragung in die Warteschlange eingereiht werden, gesendet werden. Disconnect blockiert dann, bis die Daten gesendet werden oder bis das angegebene Timeout abläuft. Wenn Sie auf false festlegen DontLinger und ein Timeoutintervall von null angeben, Close wird die Verbindung freigegeben und ausgehende Daten in der Warteschlange automatisch verworfen.

Hinweis

Wenn Sie erhalten eine SocketException, verwenden die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode zu erhalten. Nachdem Sie diesen Code erhalten haben, finden Sie in der Dokumentation zu Windows Sockets Version 2-API-Fehlercode eine ausführliche Beschreibung des Fehlers.

Hinweis

Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren. Weitere Informationen finden Sie unter Netzwerkablaufverfolgung in .NET Framework.

Gilt für: