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

例外

remoteEPnull

尝试访问套接字时出错。

调用堆栈中的较高调用方无权执行所请求的操作。

已通过调用 Listen(Int32)Socket 置于侦听状态。

示例

下面的代码示例连接到远程终结点,然后验证连接。

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 该属性获取特定的错误代码。 获取此代码后,请参阅 Windows Sockets 版本 2 API 错误代码文档,获取错误的详细说明。

除非Connect在调用Connect之前专门设置Blocking属性false,否则该方法将阻止。 如果使用面向连接的协议(如 TCP),并且确实禁用阻止, Connect 则会引发一个 SocketException ,因为它需要时间来建立连接。 无连接协议不会引发异常,因为它们只是建立默认远程主机。 可用于 SocketException.ErrorCode 获取特定错误代码。 获取此代码后,请参阅 Windows Sockets 版本 2 API 错误代码文档,获取错误的详细说明。 如果错误返回了 WSAEWOULDBLOCK,则远程主机连接已由面向 Socket连接启动,但尚未成功完成。 Poll使用该方法确定完成连接的时间Socket

备注

如果使用面向连接的协议,并且未在调用之前调用BindConnect,则基础服务提供商将分配本地网络地址和端口号。 如果使用无连接协议,则在完成发送或接收操作之前,服务提供商不会分配本地网络地址和端口号。 如果要更改默认远程主机,请使用所需的终结点再次调用 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

远程主机的端口号。

例外

addressnull

端口号无效。

尝试访问套接字时出错。

此方法对 InterNetworkInterNetworkV6 系列中的套接字有效。

address 的长度为零。

已通过调用 Listen(Int32)Socket 置于侦听状态。

示例

下面的代码示例连接到远程终结点,然后验证连接。

// 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 该属性获取特定的错误代码。 获取此代码后,请参阅 Windows Sockets 版本 2 API 错误代码文档,获取错误的详细说明。

Connect方法将阻止,除非在调用Connect之前专门设置Blocking属性false。 如果使用面向连接的协议(如 TCP),并且确实禁用阻止, Connect 则会引发一个 SocketException ,因为它需要时间来建立连接。 无连接协议不会引发异常,因为它们只是建立默认远程主机。 可用于 SocketException.ErrorCode 获取特定错误代码。 获取此代码后,请参阅 Windows Sockets 版本 2 API 错误代码文档,获取错误的详细说明。 如果错误返回了 WSAEWOULDBLOCK,则远程主机连接已由面向 Socket连接启动,但尚未成功完成。 Poll使用该方法确定完成连接的时间Socket

备注

如果使用面向连接的协议,并且未在调用之前调用BindConnect,则基础服务提供商将分配本地网络地址和端口号。 如果使用无连接协议,则在完成发送或接收操作之前,服务提供商不会分配本地网络地址和端口号。 如果要更改默认远程主机,请使用所需的终结点再次调用 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

远程主机的端口号。

例外

addressesnull

端口号无效。

尝试访问套接字时出错。

套接字不在或InterNetworkV6系列中InterNetwork

address 的长度为零。

已通过调用 Listen(Int32)Socket 置于侦听状态。

示例

下面的代码示例连接到远程终结点,然后验证连接。

// 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后,可以使用该方法将数据发送到远程设备,或使用该方法从远程设备SendReceive接收数据。

如果使用无连接协议(如 UDP),则无需在发送和接收数据之前调用 Connect 。 可以使用 SendTo 远程主机并 ReceiveFrom 同步通信。 如果确实调用 Connect 从指定默认值以外的地址到达的任何数据报将被丢弃。 如果要将默认远程主机设置为广播地址,必须先调用 SetSocketOption 该方法并将套接字选项设置为 SocketOptionName.BroadcastConnect 将引发 SocketException。 如果收到, SocketException请使用该 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅Windows套接字版本 2 API 错误代码文档,获取错误详细说明。

Connect方法将阻止,除非你在调用Connect之前专门设置Blocking属性false。 如果使用的是面向连接的协议(如 TCP),并且确实禁用了阻止, Connect 则会引发一个 SocketException ,因为它需要时间来建立连接。 无连接协议不会引发异常,因为它们只是建立默认远程主机。 可用于 SocketException.ErrorCode 获取特定错误代码。 获取此代码后,请参阅Windows套接字版本 2 API 错误代码文档,获取错误详细说明。 如果错误返回了 WSAEWOULDBLOCK,则远程主机连接已由面向 Socket连接的启动,但尚未成功完成。 使用该方法 Poll 确定连接完成的时间 Socket

备注

如果使用面向连接的协议,并且未在调用Connect之前调用Bind,则基础服务提供商将分配本地网络地址和端口号。 如果使用无连接协议,则在完成发送或接收操作之前,服务提供商不会分配本地网络地址和端口号。 如果要更改默认远程主机,请使用所需的终结点再次调用 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

远程主机的端口号。

例外

hostnull

端口号无效。

尝试访问套接字时出错。

套接字不在或InterNetworkV6系列中InterNetwork

已通过调用 Listen(Int32)Socket 置于侦听状态。

示例

下面的代码示例连接到远程终结点,然后验证连接。

// 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后,可以使用该方法将数据发送到远程设备,或使用该方法从远程设备SendReceive接收数据。

如果使用无连接协议(如 UDP),则无需在发送和接收数据之前调用 Connect 。 可以使用 SendTo 远程主机并 ReceiveFrom 同步通信。 如果确实调用 Connect 从指定默认值以外的地址到达的任何数据报将被丢弃。 如果要将默认远程主机设置为广播地址,必须先调用 SetSocketOption 该方法并将套接字选项设置为 SocketOptionName.BroadcastConnect 将引发 SocketException。 如果收到, SocketException请使用该 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅Windows套接字版本 2 API 错误代码文档,获取错误详细说明。

除非在调用Connect之前专门设置Blocking属性false,否则该方法Connect将阻止。 如果使用的是面向连接的协议(如 TCP),并且确实禁用了阻止, Connect 则会引发一个 SocketException ,因为它需要时间来建立连接。 无连接协议不会引发异常,因为它们只是建立默认远程主机。 可用于 SocketException.ErrorCode 获取特定错误代码。 获取此代码后,请参阅Windows套接字版本 2 API 错误代码文档,获取错误详细说明。 如果错误返回了 WSAEWOULDBLOCK,则远程主机连接已由面向 Socket连接的启动,但尚未成功完成。 使用该方法 Poll 确定连接完成的时间 Socket

如果启用了 IPv6 并 Connect(String, Int32) 调用该方法以连接到解析为 IPv6 和 IPv4 地址的主机,则会先尝试连接到 IPv6 地址,然后再尝试 IPv4 地址。 如果主机未侦听 IPv6 地址,则这可能会延迟建立连接的时间。

备注

如果使用的是面向连接的协议,并且未在调用Connect之前调用Bind,则基础服务提供商将分配本地网络地址和端口号。 如果使用无连接协议,则在完成发送或接收操作之前,服务提供商不会分配本地网络地址和端口号。 如果要更改默认远程主机,请使用所需的终结点再次调用 Connect

备注

如果套接字以前已断开连接,则无法使用此方法还原连接。 使用其中一种异步 BeginConnect 方法重新连接。 这是基础提供程序的限制。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅.NET Framework中的网络跟踪

适用于