Socket.Connect Метод

Определение

Устанавливает подключение к удаленному узлу.

Перегрузки

Connect(EndPoint)

Устанавливает подключение к удаленному узлу.

Connect(IPAddress, Int32)

Устанавливает подключение к удаленному узлу. Узел задается IP-адресом и номером порта.

Connect(IPAddress[], Int32)

Устанавливает подключение к удаленному узлу. Узел задается массивом IP-адресов и номером порта.

Connect(String, Int32)

Устанавливает подключение к удаленному узлу. Узел задается именем узла и номером порта.

Connect(EndPoint)

Устанавливает подключение к удаленному узлу.

public:
 void Connect(System::Net::EndPoint ^ remoteEP);
public void Connect (System.Net.EndPoint remoteEP);
member this.Connect : System.Net.EndPoint -> unit
Public Sub Connect (remoteEP As EndPoint)

Параметры

remoteEP
EndPoint

Объект EndPoint, представляющий удаленное устройство.

Исключения

remoteEP имеет значение null.

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Вызывающий объект, находящийся выше в стеке вызовов, не имеет разрешения на запрошенную операцию.

Сокет Socket был переведен в состояние прослушивания путем вызова Listen(Int32).

Примеры

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

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

Комментарии

При использовании протокола, ориентированного на подключение, например TCP, Connect метод синхронно устанавливает сетевое подключение между LocalEndPoint указанной удаленной конечной точкой. При использовании протокола Connect без подключения устанавливается удаленный узел по умолчанию. После вызова Connectможно отправить данные на удаленное устройство с Send помощью метода или получить данные с удаленного устройства с помощью Receive метода.

Если вы используете протокол без подключения, например UDP, перед отправкой и получением данных не нужно вызывать Connect . Вы можете использовать SendTo и ReceiveFrom синхронно взаимодействовать с удаленным узлом. При вызове Connectвсе диаграммы данных, поступающие с адреса, отличного от указанного по умолчанию, будут удалены. Если вы хотите задать удаленный узел по умолчанию для широковещательного адреса, необходимо сначала вызвать SetSocketOption метод и задать для параметра сокета значение SocketOptionName.Broadcastили Connect вызвать исключение SocketException. При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows sockets версии 2, чтобы получить подробное описание ошибки.

Этот Connect метод будет блокироваться, если только вы не задали Blocking свойство false перед вызовом Connect. Если вы используете протокол, ориентированный на подключение, например TCP, и вы отключаете блокировку, вызовет исключениеSocketException, Connect так как ему требуется время для подключения. Протоколы без подключения не вызывают исключения, так как они просто устанавливают удаленный узел по умолчанию. Вы можете использовать для SocketException.ErrorCode получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows sockets версии 2, чтобы получить подробное описание ошибки. Если ошибка вернула WSAEWOULDBLOCK, подключение к удаленному узлу было инициировано ориентированным на подключение Socket, но еще не завершено успешно. Poll Используйте метод, чтобы определить, когда Socket завершится подключение.

Примечание

Если вы используете протокол, ориентированный на подключение, и не выполняли вызов Bind перед вызовом Connect, базовый поставщик услуг назначит адрес локальной сети и номер порта. Если вы используете протокол без подключения, поставщик услуг не назначит адрес локальной сети и номер порта, пока не завершите операцию отправки или получения. Если вы хотите изменить удаленный узел по умолчанию, снова вызовите Connect нужную конечную точку.

Примечание

Если сокет был ранее отключен, этот метод нельзя использовать для восстановления соединения. Используйте один из асинхронных BeginConnect методов для повторного подключения. Это ограничение базового поставщика.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в разделе "Трассировка сети" в платформа .NET Framework.

См. также раздел

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

Connect(IPAddress, Int32)

Устанавливает подключение к удаленному узлу. Узел задается IP-адресом и номером порта.

public:
 void Connect(System::Net::IPAddress ^ address, int port);
public void Connect (System.Net.IPAddress address, int port);
member this.Connect : System.Net.IPAddress * int -> unit
Public Sub Connect (address As IPAddress, port As Integer)

Параметры

address
IPAddress

IP-адрес удаленного узла.

port
Int32

Номер порта удаленного узла.

Исключения

address имеет значение null.

Недействительный номер порта.

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Этот метод допустим для сокетов в семействах InterNetwork или InterNetworkV6.

Длина параметра address равна нулю.

Сокет Socket был переведен в состояние прослушивания путем вызова Listen(Int32).

Примеры

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

// Synchronous connect using IPAddress to resolve the 
// host name.
static void Connect1( String^ host, int port )
{
   array<IPAddress^>^IPs = Dns::GetHostAddresses( host );
   Socket^ s = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
   Console::WriteLine( "Establishing Connection to {0}", host );
   s->Connect( IPs[ 0 ], port );
   Console::WriteLine( "Connection established" );
}
// Synchronous connect using IPAddress to resolve the
// host name.
public static void Connect1(string host, int port)
{
    IPAddress[] IPs = Dns.GetHostAddresses(host);

    Socket s = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream,
        ProtocolType.Tcp);

    Console.WriteLine("Establishing Connection to {0}",
        host);
    s.Connect(IPs[0], port);
    Console.WriteLine("Connection established");
}

Комментарии

При использовании протокола, ориентированного на подключение, например TCP, Connect метод синхронно устанавливает сетевое подключение между LocalEndPoint указанной удаленной конечной точкой. При использовании протокола Connect без подключения устанавливается удаленный узел по умолчанию. После вызова Connect можно отправить данные на удаленное устройство с Send помощью метода или получить данные с удаленного устройства с Receive помощью метода.

Если вы используете протокол без подключения, например UDP, перед отправкой и получением данных не нужно вызывать Connect . Вы можете использовать SendTo и ReceiveFrom синхронно взаимодействовать с удаленным узлом. Если вы вызываете Connect какие-либо датаграммы, поступающие с адреса, отличного от указанного по умолчанию, будут удалены. Если вы хотите задать удаленный узел по умолчанию для широковещательного адреса, необходимо сначала вызвать SetSocketOption метод и задать для параметра сокета значение SocketOptionName.Broadcastили Connect вызвать исключение SocketException. При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows sockets версии 2, чтобы получить подробное описание ошибки.

Connect метод блокируется, если только свойство не задано Blocking false до вызова Connect. Если вы используете протокол, ориентированный на подключение, например TCP, и вы отключаете блокировку, вызовет исключениеSocketException, Connect так как ему требуется время для подключения. Протоколы без подключения не вызывают исключения, так как они просто устанавливают удаленный узел по умолчанию. Вы можете использовать для SocketException.ErrorCode получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows sockets версии 2, чтобы получить подробное описание ошибки. Если ошибка вернула WSAEWOULDBLOCK, подключение к удаленному узлу было инициировано ориентированным на подключение Socket, но еще не завершено успешно. Poll Используйте метод, чтобы определить, когда Socket завершится подключение.

Примечание

Если вы используете протокол, ориентированный на подключение, и не выполняли вызов Bind перед вызовом Connect, базовый поставщик услуг назначит адрес локальной сети и номер порта. Если вы используете протокол без подключения, поставщик услуг не назначит адрес локальной сети и номер порта, пока не завершите операцию отправки или получения. Если вы хотите изменить удаленный узел по умолчанию, снова вызовите Connect нужную конечную точку.

Примечание

Если сокет был ранее отключен, этот метод нельзя использовать для восстановления соединения. Используйте один из асинхронных BeginConnect методов для повторного подключения. Это ограничение базового поставщика.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в разделе "Трассировка сети" в платформа .NET Framework.

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

Connect(IPAddress[], Int32)

Устанавливает подключение к удаленному узлу. Узел задается массивом IP-адресов и номером порта.

public:
 void Connect(cli::array <System::Net::IPAddress ^> ^ addresses, int port);
public void Connect (System.Net.IPAddress[] addresses, int port);
member this.Connect : System.Net.IPAddress[] * int -> unit
Public Sub Connect (addresses As IPAddress(), port As Integer)

Параметры

addresses
IPAddress[]

IP-адрес удаленного узла.

port
Int32

Номер порта удаленного узла.

Исключения

addresses имеет значение null.

Недействительный номер порта.

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Сокет не находится в семействеInterNetwork.InterNetworkV6

Длина параметра address равна нулю.

Сокет Socket был переведен в состояние прослушивания путем вызова Listen(Int32).

Примеры

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

// Synchronous connect using Dns.ResolveToAddresses to 
// resolve the host name.
static void Connect2( String^ host, int port )
{
   array<IPAddress^>^IPs = Dns::GetHostAddresses( host );
   Socket^ s = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
   Console::WriteLine( "Establishing Connection to {0}", host );
   s->Connect( IPs, port );
   Console::WriteLine( "Connection established" );
}
// Synchronous connect using Dns.GetHostAddresses to
// resolve the host name.
public static void Connect2(string host, int port)
{
    IPAddress[] IPs = Dns.GetHostAddresses(host);

    Socket s = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream,
        ProtocolType.Tcp);
    Console.WriteLine("Establishing Connection to {0}",
        host);
    s.Connect(IPs, port);
    Console.WriteLine("Connection established");
}

Комментарии

Этот метод обычно используется сразу после вызова GetHostAddresses, который может возвращать несколько IP-адресов для одного узла. При использовании протокола, ориентированного на подключение, например TCP, Connect метод синхронно устанавливает сетевое подключение между LocalEndPoint указанной удаленной конечной точкой. При использовании протокола Connect без подключения устанавливается удаленный узел по умолчанию. После вызова Connect можно отправить данные на удаленное устройство с Send помощью метода или получить данные с удаленного устройства с Receive помощью метода.

Если вы используете протокол без подключения, например UDP, перед отправкой и получением данных не нужно вызывать Connect . Вы можете использовать SendTo и ReceiveFrom синхронно взаимодействовать с удаленным узлом. Если вы вызываете Connect какие-либо датаграммы, поступающие с адреса, отличного от указанного по умолчанию, будут удалены. Если вы хотите задать удаленный узел по умолчанию для широковещательного адреса, необходимо сначала вызвать SetSocketOption метод и задать для параметра сокета значение SocketOptionName.Broadcastили Connect вызвать исключение SocketException. При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows sockets версии 2, чтобы получить подробное описание ошибки.

Connect метод блокируется, если только свойство не задано Blocking false до вызова Connect. Если вы используете протокол, ориентированный на подключение, например TCP, и вы отключаете блокировку, вызовет исключениеSocketException, Connect так как ему требуется время для подключения. Протоколы без подключения не вызывают исключения, так как они просто устанавливают удаленный узел по умолчанию. Вы можете использовать для SocketException.ErrorCode получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows sockets версии 2, чтобы получить подробное описание ошибки. Если ошибка вернула WSAEWOULDBLOCK, подключение к удаленному узлу было инициировано ориентированным на подключение Socket, но еще не завершено успешно. Poll Используйте метод, чтобы определить, когда Socket завершится подключение.

Примечание

Если вы используете протокол, ориентированный на подключение, и не выполняли вызов Bind перед вызовом Connect, базовый поставщик услуг назначит адрес локальной сети и номер порта. Если вы используете протокол без подключения, поставщик услуг не назначит адрес локальной сети и номер порта, пока не завершите операцию отправки или получения. Если вы хотите изменить удаленный узел по умолчанию, снова вызовите Connect нужную конечную точку.

Примечание

Если сокет был ранее отключен, этот метод нельзя использовать для восстановления соединения. Используйте один из асинхронных BeginConnect методов для повторного подключения. Это ограничение базового поставщика.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в разделе "Трассировка сети" в платформа .NET Framework.

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

Connect(String, Int32)

Устанавливает подключение к удаленному узлу. Узел задается именем узла и номером порта.

public:
 void Connect(System::String ^ host, int port);
public void Connect (string host, int port);
member this.Connect : string * int -> unit
Public Sub Connect (host As String, port As Integer)

Параметры

host
String

Имя удаленного узла.

port
Int32

Номер порта удаленного узла.

Исключения

host имеет значение null.

Недействительный номер порта.

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Сокет не находится в семействеInterNetwork.InterNetworkV6

Сокет Socket был переведен в состояние прослушивания путем вызова Listen(Int32).

Примеры

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

// Synchronous connect using host name (resolved by the 
// Connect call.)
static void Connect3( String^ host, int port )
{
   Socket^ s = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
   Console::WriteLine( "Establishing Connection to {0}", host );
   s->Connect( host, port );
   Console::WriteLine( "Connection established" );
}
// Synchronous connect using host name (resolved by the
// Connect call.)
public static void Connect3(string host, int port)
{
    Socket s = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream,
        ProtocolType.Tcp);

    Console.WriteLine("Establishing Connection to {0}",
        host);
    s.Connect(host, port);
    Console.WriteLine("Connection established");
}

Комментарии

Если вы используете протокол TCP, ориентированный на подключение, Connect метод синхронно устанавливает сетевое подключение между LocalEndPoint указанным удаленным узлом. При использовании протокола Connect без подключения устанавливается удаленный узел по умолчанию. После вызова Connect можно отправить данные на удаленное устройство с Send помощью метода или получить данные с удаленного устройства с Receive помощью метода.

Если вы используете протокол без подключения, например UDP, перед отправкой и получением данных не нужно вызывать Connect . Вы можете использовать SendTo и ReceiveFrom синхронно взаимодействовать с удаленным узлом. Если вы вызываете Connect какие-либо датаграммы, поступающие с адреса, отличного от указанного по умолчанию, будут удалены. Если вы хотите задать удаленный узел по умолчанию для широковещательного адреса, необходимо сначала вызвать SetSocketOption метод и задать для параметра сокета значение SocketOptionName.Broadcastили Connect вызвать исключение SocketException. При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows sockets версии 2, чтобы получить подробное описание ошибки.

Этот Connect метод будет блокироваться, если только вы не задали Blocking свойство false перед вызовом Connect. Если вы используете протокол, ориентированный на подключение, например TCP, и вы отключаете блокировкуSocketException, вызовет исключение, Connect так как ему требуется время для подключения. Протоколы без подключения не вызывают исключения, так как они просто устанавливают удаленный узел по умолчанию. Вы можете использовать для SocketException.ErrorCode получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows sockets версии 2, чтобы получить подробное описание ошибки. Если ошибка вернула WSAEWOULDBLOCK, подключение к удаленному узлу было инициировано ориентированным на подключение Socket, но еще не завершено успешно. Poll Используйте метод, чтобы определить, когда Socket завершится подключение.

Если протокол IPv6 включен и Connect(String, Int32) метод вызывается для подключения к узлу, который разрешается как к IPv6, так и к IPv4-адресам, подключение к IPv6-адресу будет предпринята сначала перед IPv4-адресом. Это может привести к задержке времени установки подключения, если узел не прослушивает IPv6-адрес.

Примечание

Если вы используете протокол, ориентированный на подключение и не звонили Bind перед вызовом Connect, базовый поставщик услуг назначит адрес локальной сети и номер порта. Если вы используете протокол без подключения, поставщик услуг не назначит адрес локальной сети и номер порта, пока не завершите операцию отправки или получения. Если вы хотите изменить удаленный узел по умолчанию, снова вызовите Connect нужную конечную точку.

Примечание

Если сокет был ранее отключен, этот метод нельзя использовать для восстановления соединения. Используйте один из асинхронных BeginConnect методов для повторного подключения. Это ограничение базового поставщика.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в разделе "Трассировка сети" в платформа .NET Framework.

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