Socket.Disconnect(Boolean) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Закрывает подключение к сокету и позволяет повторно его использовать.
public:
void Disconnect(bool reuseSocket);
public void Disconnect (bool reuseSocket);
member this.Disconnect : bool -> unit
Public Sub Disconnect (reuseSocket As Boolean)
Параметры
- reuseSocket
- Boolean
Значение true
, если этот сокет может быть повторно использован после закрытия текущего подключения; в противном случае — значение false
.
Исключения
Объект Socket закрыт.
Произошла ошибка при попытке доступа к сокету.
Примеры
В следующем примере кода создается сокет для синхронного взаимодействия и отправляются некоторые данные на удаленный узел. Затем он вызывает Shutdown, чтобы остановить действие отправки и получения, и Disconnect, чтобы закрыть подключение сокета.
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");
Комментарии
Если вы используете протокол, ориентированный на подключение, этот метод можно использовать для закрытия сокета. Этот метод завершает соединение и задает свойству Connected значение false
. Однако если reuseSocket
имеет значение true
, можно повторно использовать сокет.
Чтобы обеспечить отправку и получение всех данных до закрытия сокета, необходимо вызвать Shutdown перед вызовом Disconnect метода .
Если необходимо позвонить Disconnect без первого вызова Shutdown, можно задать DontLingerSocket для параметра false
значение и указать ненулевой интервал времени ожидания, чтобы обеспечить отправку данных, помещенных в очередь для исходящей передачи.
Disconnect затем блокируется до отправки данных или до истечения указанного времени ожидания. Если задано значение DontLingerfalse
и указан нулевой интервал времени ожидания, Close подключение будет освобождено, а исходящие данные в очереди будут автоматически удалены.
Примечание
Если вы получаете SocketException, используйте SocketException.ErrorCode свойство , чтобы получить конкретный код ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API сокетов Windows версии 2 , чтобы получить подробное описание ошибки.
Примечание
Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в статье Трассировка сети в платформа .NET Framework.