Поделиться через


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.

Применяется к