Sdílet prostřednictvím


Socket.Disconnect(Boolean) Metoda

Definice

Zavře připojení soketu a umožní opakované použití soketu.

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

Parametry

reuseSocket
Boolean

truepokud lze tuto soketu znovu použít po ukončení aktuálního připojení; v opačném případě . false

Výjimky

Objekt Socket byl uzavřen.

Při pokusu o přístup k soketu došlo k chybě.

Příklady

Následující příklad kódu vytvoří soket pro synchronní komunikaci a odešle některá data vzdálenému hostiteli. Potom zavolá , Shutdownzastaví aktivitu odesílání a příjmu a Disconnectukončí připojení soketu.

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

Poznámky

Pokud používáte protokol orientovaný na připojení, můžete tuto metodu použít k zavření soketu. Tato metoda ukončí připojení a nastaví Connected vlastnost na false. Pokud reuseSocket je truevšak hodnota , můžete soket znovu použít.

Chcete-li zajistit, aby všechna data byla odeslána a přijata před uzavřením soketu, měli byste před voláním Disconnect metody volatShutdown.

Pokud potřebujete volat Disconnect bez prvního volání Shutdown, můžete nastavit DontLingerSocket možnost na false a zadat nenulový interval časového limitu, aby se data zařazená do fronty pro odchozí přenos odesílala. Disconnect pak se zablokuje, dokud nebudou data odeslána nebo dokud nevyprší zadaný časový limit. Pokud nastavíte DontLinger a false zadáte nulový interval časového limitu, Close uvolní připojení a automaticky zahodí odchozí data zařazená do fronty.

Poznámka

Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API rozhraní Windows Sockets verze 2 .

Poznámka

Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.

Platí pro