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

例外狀況

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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。

除非您Connect在呼叫 Connect之前特別將 屬性false設定Blocking為 ,否則方法會封鎖 。 如果您使用 TCP 之類的連線導向通訊協定並停用封鎖,將會擲回, ConnectSocketException 因為它需要時間進行連線。 無連線通訊協定不會擲回例外狀況,因為它們只會建立預設遠端主機。 您可以使用 SocketException.ErrorCode 來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。 如果錯誤傳回 WSAEWOULDBLOCK,遠端主機連線已由連線導向 Socket起始,但尚未成功完成。 Poll使用方法來判斷 Socket 何時完成連接。

注意

如果您使用連線導向通訊協定,且未在呼叫 之前呼叫 BindConnect,則基礎服務提供者會指派局域網路位址和埠號碼。 如果您使用無連線通訊協定,在完成傳送或接收作業之前,服務提供者不會指派局域網路位址和埠號碼。 如果您要變更預設遠端主機,請使用所需的端點再次呼叫 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

遠端主機的連接埠號碼。

例外狀況

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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。

Connect方法將會封鎖,除非您在呼叫 Connect之前特別設定 Blocking 屬性false。 如果您使用 TCP 之類的連線導向通訊協定並停用封鎖,將會擲回, ConnectSocketException 因為它需要時間進行連線。 無連線通訊協定不會擲回例外狀況,因為它們只會建立預設遠端主機。 您可以使用 SocketException.ErrorCode 來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。 如果錯誤傳回 WSAEWOULDBLOCK,遠端主機連線已由連線導向 Socket起始,但尚未成功完成。 Poll使用方法來判斷 Socket 何時完成連接。

注意

如果您使用連線導向通訊協定,且未在呼叫 之前呼叫 BindConnect,則基礎服務提供者會指派局域網路位址和埠號碼。 如果您使用無連線通訊協定,在完成傳送或接收作業之前,服務提供者不會指派局域網路位址和埠號碼。 如果您要變更預設遠端主機,請使用所需的端點再次呼叫 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

遠端主機的連接埠號碼。

例外狀況

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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。

Connect方法將會封鎖,除非您在呼叫 Connect之前特別設定 Blocking 屬性false。 如果您使用 TCP 之類的連線導向通訊協定並停用封鎖,將會擲回, ConnectSocketException 因為它需要時間進行連線。 無連線通訊協定不會擲回例外狀況,因為它們只會建立預設遠端主機。 您可以使用 SocketException.ErrorCode 來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。 如果錯誤傳回 WSAEWOULDBLOCK,遠端主機連線已由連線導向 Socket起始,但尚未成功完成。 Poll使用方法來判斷 Socket 何時完成連接。

注意

如果您使用連線導向通訊協定,且未在呼叫 之前呼叫 BindConnect,則基礎服務提供者會指派局域網路位址和埠號碼。 如果您使用無連線通訊協定,在完成傳送或接收作業之前,服務提供者不會指派局域網路位址和埠號碼。 如果您要變更預設遠端主機,請使用所需的端點再次呼叫 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

遠端主機的連接埠號碼。

例外狀況

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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。

除非您Connect在呼叫 Connect之前特別將 屬性false設定Blocking為 ,否則方法會封鎖 。 如果您使用 TCP 之類的連線導向通訊協定並停用封鎖,將會擲回, ConnectSocketException 因為它需要時間進行連線。 無連線通訊協定不會擲回例外狀況,因為它們只會建立預設遠端主機。 您可以使用 SocketException.ErrorCode 來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。 如果錯誤傳回 WSAEWOULDBLOCK,遠端主機連線已由連線導向 Socket起始,但尚未成功完成。 Poll使用方法來判斷 Socket 何時完成連接。

如果已啟用 IPv6,且 Connect(String, Int32) 呼叫 方法以連線到解析為 IPv6 和 IPv4 位址的主機,則會先嘗試連線到 IPv6 位址,然後再嘗試 IPv4 位址。 如果主機未接聽 IPv6 位址,這可能會延遲建立連線的時間。

注意

如果您使用連線導向通訊協定,且未在呼叫 之前呼叫 BindConnect,則基礎服務提供者會指派局域網路位址和埠號碼。 如果您使用無連線通訊協定,在完成傳送或接收作業之前,服務提供者不會指派局域網路位址和埠號碼。 如果您要變更預設遠端主機,請使用所需的端點再次呼叫 Connect

注意

如果先前已中斷連線套接字,則您無法使用這個方法來還原連線。 使用其中一個異步 BeginConnect 方法重新連線。 這是基礎提供者的限制。

注意

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤

適用於