Socket.Disconnect(Boolean) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
true
pokud 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 true
vš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.