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, и отключите блокировку, Connect вызовет исключение, SocketException так как ему требуется время для подключения. Протоколы без подключения не вызовут исключение, так как они просто устанавливают удаленный узел по умолчанию. SocketException.ErrorCodeДля получения конкретного кода ошибки можно использовать. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 . Если ошибка вернула ВСАЕВАУЛДБЛОКК, соединение с удаленным узлом было инициировано с помощью подключения 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, и отключите блокировку, Connect вызовет исключение, SocketException так как ему требуется время для подключения. Протоколы без подключения не вызовут исключение, так как они просто устанавливают удаленный узел по умолчанию. SocketException.ErrorCodeДля получения конкретного кода ошибки можно использовать. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 . Если ошибка вернула ВСАЕВАУЛДБЛОКК, соединение с удаленным узлом было инициировано с помощью подключения 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, и отключите блокировку, Connect вызовет исключение, SocketException так как ему требуется время для подключения. Протоколы без подключения не вызовут исключение, так как они просто устанавливают удаленный узел по умолчанию. SocketException.ErrorCodeДля получения конкретного кода ошибки можно использовать. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 . Если ошибка вернула ВСАЕВАУЛДБЛОКК, соединение с удаленным узлом было инициировано с помощью подключения 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, и отключите блокировку, Connect вызовет исключение, SocketException так как ему требуется время для подключения. Протоколы без подключения не вызовут исключение, так как они просто устанавливают удаленный узел по умолчанию. SocketException.ErrorCodeДля получения конкретного кода ошибки можно использовать. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 . Если ошибка вернула ВСАЕВАУЛДБЛОКК, соединение с удаленным узлом было инициировано с помощью подключения Socket , но еще не завершилось успешно. Используйте Poll метод, чтобы определить, когда Socket завершается соединение.

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

Примечание

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

Примечание

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

Примечание

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

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