语言

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
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 。

例外

remoteEP 是 null。

尝试访问套接字时出错。

调用堆栈中较高级别的调用方没有请求的作的权限。

呼叫 Socket 已置于侦听状态 Listen(Int32)。

示例

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

// .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 套接字版本 2 API 错误代码 文档。

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

注释

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

注释

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

注释

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

另请参阅

适用于

Connect(IPAddress, Int32)

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

远程主机的端口号。

例外

address 是 null。

端口号无效。

尝试访问套接字时出错。

此方法对于或InterNetwork系列中的InterNetworkV6套接字有效。

长度 address 为零。

呼叫 Socket 已置于侦听状态 Listen(Int32)。

示例

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

// 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 套接字版本 2 API 错误代码 文档。

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

注释

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

注释

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

注释

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

适用于

Connect(IPAddress[], Int32)

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

远程主机的端口号。

例外

addresses 是 null。

端口号无效。

尝试访问套接字时出错。

套接字不在或InterNetwork系列中InterNetworkV6。

长度 addresses 为零。

呼叫 Socket 已置于侦听状态 Listen(Int32)。

示例

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

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

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

注释

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

注释

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

注释

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

适用于

Connect(String, Int32)

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

远程主机的端口号。

例外

host 是 null。

端口号无效。

尝试访问套接字时出错。

套接字不在或InterNetwork系列中InterNetworkV6。

呼叫 Socket 已置于侦听状态 Listen(Int32)。

示例

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

// 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 属性获取特定的错误代码。 获取此代码后,有关错误的详细说明,请参阅 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 地址,这可能会延迟建立连接的时间。

注释

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

注释

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

注释

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

适用于