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


Socket.Connected Свойство

Определение

Получает значение, указывающее, подключается ли объект Socket к удаленному узлу в результате последней операции Send или Receive.

public:
 property bool Connected { bool get(); };
public bool Connected { get; }
member this.Connected : bool
Public ReadOnly Property Connected As Boolean

Значение свойства

Значение true, если объект Socket в результате последней операции был подключен к удаленному ресурсу; в противном случае — значение false.

Примеры

В следующем примере кода выполняется подключение к удаленной конечной точке Connected , проверка свойства и текущее состояние подключения.

client->Connect( anEndPoint );
if (  !client->Connected )
{
   Console::WriteLine( "Winsock error: {0}", Convert::ToString(
      System::Runtime::InteropServices::Marshal::GetLastWin32Error() ) );
}
   
// This is how you can determine whether a socket is still connected.
bool blockingState = client->Blocking;
try
{
   array<Byte>^tmp = gcnew array<Byte>(1);
   client->Blocking = false;
   client->Send( tmp, 0, static_cast<SocketFlags>(0) );
   Console::WriteLine( L"Connected!" );
}
catch ( SocketException^ e ) 
{
   // 10035 == WSAEWOULDBLOCK
   if ( e->NativeErrorCode.Equals( 10035 ) )
   {
      Console::WriteLine( "Connected from an exception!" );
   }
   else
   {
      Console::WriteLine( "Disconnected: {0}!", e->NativeErrorCode );
   }
}
finally
{
   client->Blocking = blockingState;
}

Console::WriteLine( "Connected: {0}", client->Connected );
// .Connect throws an exception if unsuccessful
client.Connect(anEndPoint);

// This is how you can determine whether a socket is still connected.
bool blockingState = client.Blocking;
try
{
    byte [] tmp = new byte[1];

    client.Blocking = false;
    client.Send(tmp, 0, 0);
    Console.WriteLine("Connected!");
}
catch (SocketException e)
{
    // 10035 == WSAEWOULDBLOCK
    if (e.NativeErrorCode.Equals(10035))
    {
        Console.WriteLine("Still Connected, but the Send would block");
    }
    else
    {
        Console.WriteLine("Disconnected: error code {0}!", e.NativeErrorCode);
    }
}
finally
{
    client.Blocking = blockingState;
}

Console.WriteLine("Connected: {0}", client.Connected);
    ' .Connect throws an exception if unsuccessful
    client.Connect(anEndPoint)
    
    ' This is how you can determine whether a socket is still connected.
    Dim blockingState As Boolean = client.Blocking
    Try
        Dim tmp(0) As Byte
        
        client.Blocking = False
        client.Send(tmp, 0, 0)
        Console.WriteLine("Connected!")
    Catch e As SocketException
        ' 10035 == WSAEWOULDBLOCK
        If e.NativeErrorCode.Equals(10035) Then
            Console.WriteLine("Still Connected, but the Send would block")
        Else
            Console.WriteLine("Disconnected: error code {0}!", e.NativeErrorCode)
        End If
    Finally
        client.Blocking = blockingState
    End Try
    
    Console.WriteLine("Connected: {0}", client.Connected)

End Sub

Комментарии

Свойство Connected получает состояние подключения объекта по состоянию Socket на последнюю операцию ввода-вывода. Когда он возвращает false, Socket объект либо никогда не был подключен, либо больше не подключен. Connected не является потокобезопасной; Он может вернуться true после прерывания операции, если отсоединен от другого Socket потока.

Значение Connected свойства отражает состояние подключения по состоянию на последнюю операцию. Если необходимо определить текущее состояние подключения, выполните неблокивный вызов Send с нулевым байтом. Если вызов возвращается успешно или выдает код ошибки WAEWOULDBLOCK (10035), сокет по-прежнему подключен; в противном случае сокет больше не подключен.

При вызове Connect для сокета Connected UDP свойство всегда возвращает trueзначение ; однако это действие не изменяет присущий UDP характер без подключения.

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