Socket.Connect 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
与远程主机建立连接。
重载
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
为 null
。
尝试访问套接字时出错。
调用堆栈中的较高调用方无权执行所请求的操作。
已通过调用 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 套接字版本 2 API 错误代码 文档,获取错误的详细说明。
方法Connect将阻止,除非在调用 Connect之前专门将 属性设置为 Blockingfalse
。 如果使用面向连接的协议(如 TCP)并且禁用了阻止, Connect 则会引发 , SocketException 因为它需要时间来建立连接。 无连接协议不会引发异常,因为它们只是建立默认远程主机。 可以使用 SocketException.ErrorCode 获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。 如果错误返回 WSAEWOULDBLOCK,则表示远程主机连接已由面向 Socket连接的 启动,但尚未成功完成。
Poll使用 方法确定 何时Socket完成连接。
注意
如果使用面向连接的协议,并且未在调用 Connect之前调用 Bind ,则基础服务提供程序将分配本地网络地址和端口号。 如果使用无连接协议,则在完成发送或接收操作之前,服务提供商不会分配本地网络地址和端口号。 如果要更改默认远程主机,请使用所需的终结点再次调用 Connect 。
注意
如果之前已断开套接字的连接,则无法使用此方法还原连接。 使用其中一个异步 BeginConnect 方法重新连接。 这是基础提供程序的限制。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- Send(Byte[], Int32, SocketFlags)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- LocalEndPoint
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
- Blocking
- Poll(Int32, SelectMode)
适用于
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
远程主机的端口号。
例外
address
为 null
。
端口号无效。
尝试访问套接字时出错。
此方法对 InterNetwork 或 InterNetworkV6 系列中的套接字有效。
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 套接字版本 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
远程主机的端口号。
例外
addresses
为 null
。
端口号无效。
尝试访问套接字时出错。
套接字不在 或 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 。 可以使用 SendTo 和 ReceiveFrom 与远程主机同步通信。 如果确实调用 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
远程主机的端口号。
例外
host
为 null
。
端口号无效。
尝试访问套接字时出错。
套接字不在 或 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 。 可以使用 SendTo 和 ReceiveFrom 与远程主机同步通信。 如果确实调用 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 中的网络跟踪。