Socket.Connect 方法

定义

与远程主机建立连接。

重载

Connect(EndPoint)

与远程主机建立连接。

Connect(IPAddress, Int32)

与远程主机建立连接。 主机由 IP 地址和端口号指定。

Connect(IPAddress[], Int32)

与远程主机建立连接。 主机由 IP 地址数组和端口号指定。

Connect(String, Int32)

与远程主机建立连接。 主机由主机名和端口号指定。

Connect(EndPoint)

Source:
Socket.cs
Source:
Socket.cs
Source:
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

例外

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 。 可以使用 SendToReceiveFrom 与远程主机同步通信。 如果确实调用 Connect,则将放弃从指定默认值以外的地址到达的任何数据报。 如果要将默认远程主机设置为广播地址,必须先调用 SetSocketOption 方法并将套接字选项设置为 SocketOptionName.Broadcast,否则 Connect 将引发 SocketException。 如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。

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

注意

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

注意

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

备注

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

另请参阅

适用于

Connect(IPAddress, Int32)

Source:
Socket.cs
Source:
Socket.cs
Source:
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

远程主机的端口号。

例外

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 。 可以使用 SendToReceiveFrom 与远程主机同步通信。 如果确实调用 Connect 了来自指定默认值以外的地址的任何数据报,则会被丢弃。 如果要将默认远程主机设置为广播地址,必须先调用 SetSocketOption 方法并将套接字选项设置为 SocketOptionName.Broadcast,否则 Connect 将引发 SocketException。 如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。

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

注意

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

注意

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

备注

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

适用于

Connect(IPAddress[], Int32)

Source:
Socket.cs
Source:
Socket.cs
Source:
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

远程主机的端口号。

例外

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

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

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

注意

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

注意

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

备注

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

适用于

Connect(String, Int32)

Source:
Socket.cs
Source:
Socket.cs
Source:
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

远程主机的端口号。

例外

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

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

方法Connect将阻止,除非在调用 Connect之前专门将 属性设置为 Blockingfalse 。 如果使用面向连接的协议(如 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 中的网络跟踪

适用于