Socket.Connect Метод

Определение

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

Перегрузки

Connect(EndPoint)

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

Connect(IPAddress, Int32)

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

Connect(IPAddress[], Int32)

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

Connect(String, Int32)

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

Connect(EndPoint)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

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

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 версии 2 , чтобы получить подробное описание ошибки.

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

Примечание

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

Примечание

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

Примечание

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

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

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

Connect(IPAddress, Int32)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

Устанавливает подключение к удаленному узлу. Узел задается 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 версии 2 , чтобы получить подробное описание ошибки.

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

Примечание

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

Примечание

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

Примечание

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

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

Connect(IPAddress[], Int32)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

Устанавливает подключение к удаленному узлу. Узел задается массивом 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 версии 2 , чтобы получить подробное описание ошибки.

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

Примечание

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

Примечание

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

Примечание

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

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

Connect(String, Int32)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

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

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 версии 2 , чтобы получить подробное описание ошибки.

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

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

Примечание

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

Примечание

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

Примечание

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

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