語言

Socket.Connect 方法

定義

建立與遠端主機的連線。

多載

名稱 Description
Connect(EndPoint)

建立與遠端主機的連線。

Connect(IPAddress, Int32)

建立與遠端主機的連線。 主機由 IP 位址和埠號指定。

Connect(IPAddress[], Int32)

建立與遠端主機的連線。 主機由一組 IP 位址陣列和一個埠號來指定。

Connect(String, Int32)

建立與遠端主機的連線。 主機由主機名稱和埠號指定。

Connect(EndPoint)

來源:
Socket.cs
來源:
Socket.cs
來源:
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 。

例外狀況

remoteEP 是 null。

嘗試存取該套接字時發生錯誤。

該店 Socket 已經關閉。

呼叫堆疊中較高的呼叫者沒有該請求操作的權限。

該 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 Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

Connect這個方法會被阻塞,除非你特別在呼叫Blocking之前將屬性設false為 Connect 。 如果你使用像 TCP 這種連線導向協定,並且關閉了阻擋, Connect 會拋出 a SocketException ,因為它需要時間才能建立連線。 無連線協定不會拋出例外,因為它們只是建立一個預設的遠端主機。 你可以用來 SocketException.ErrorCode 取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。 若錯誤為 WSAEWOLDBLOCK,表示遠端主機連線已被連線導向 Socket發起,但尚未成功完成。 使用該 Poll 方法來判斷何時 Socket 完成連線。

Note

如果你使用連線導向協定且在呼叫Bind前未先呼叫Connect,底層服務提供者會分配本地網路位址和埠號。 如果你使用無連線協定,服務提供者不會在你完成發送或接收操作前分配本地網路位址和埠號。 如果你想更改預設的遠端主機,請再用想要的端點呼叫 Connect 一次。

Note

如果插座之前已經斷開,那你就無法用這個方法來恢復連線。 使用非同步 BeginConnect 方法之一重新連線。 這是基礎提供者的限制。

Note

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱.NET框架中的網路追蹤。

另請參閱

適用於

Connect(IPAddress, Int32)

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

遠端主機的埠號。

例外狀況

address 是 null。

埠號無效。

嘗試存取該套接字時發生錯誤。

該店 Socket 已經關閉。

此方法適用於 or 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 Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

Connect方法會被阻塞,除非你在呼叫Blocking前特別設定屬性false為 Connect 。 如果你使用像 TCP 這種連線導向協定,並且關閉了阻擋, Connect 會拋出 a SocketException ,因為它需要時間才能建立連線。 無連線協定不會拋出例外,因為它們只是建立一個預設的遠端主機。 你可以用來 SocketException.ErrorCode 取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。 若錯誤為 WSAEWOLDBLOCK,表示遠端主機連線已被連線導向 Socket發起,但尚未成功完成。 使用該 Poll 方法來判斷何時 Socket 完成連線。

Note

如果你使用連線導向協定且在呼叫Bind前未先呼叫Connect,底層服務提供者會分配本地網路位址和埠號。 如果你使用無連線協定,服務提供者不會在你完成發送或接收操作前分配本地網路位址和埠號。 如果你想更改預設的遠端主機,請再用想要的端點呼叫 Connect 一次。

Note

如果插座之前已經斷開,那你就無法用這個方法來恢復連線。 使用非同步 BeginConnect 方法之一重新連線。 這是基礎提供者的限制。

Note

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱.NET框架中的網路追蹤。

適用於

Connect(IPAddress[], Int32)

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

遠端主機的埠號。

例外狀況

addresses 是 null。

埠號無效。

嘗試存取該套接字時發生錯誤。

該店 Socket 已經關閉。

這個套筒不屬於 InterNetwork or 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 Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

Connect方法會被阻塞,除非你在呼叫Blocking前特別設定屬性false為 Connect 。 如果你使用像 TCP 這種連線導向協定,並且關閉了阻擋, Connect 會拋出 a SocketException ,因為它需要時間才能建立連線。 無連線協定不會拋出例外,因為它們只是建立一個預設的遠端主機。 你可以用來 SocketException.ErrorCode 取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。 若錯誤為 WSAEWOLDBLOCK,表示遠端主機連線已被連線導向 Socket發起,但尚未成功完成。 使用該 Poll 方法來判斷何時 Socket 完成連線。

Note

如果你使用連線導向協定且在呼叫Bind前未先呼叫Connect,底層服務提供者會分配本地網路位址和埠號。 如果你使用無連線協定,服務提供者不會在你完成發送或接收操作前分配本地網路位址和埠號。 如果你想更改預設的遠端主機,請再用想要的端點呼叫 Connect 一次。

Note

如果插座之前已經斷開,那你就無法用這個方法來恢復連線。 使用非同步 BeginConnect 方法之一重新連線。 這是基礎提供者的限制。

Note

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱.NET框架中的網路追蹤。

適用於

Connect(String, Int32)

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

遠端主機的埠號。

例外狀況

host 是 null。

埠號無效。

嘗試存取該套接字時發生錯誤。

該店 Socket 已經關閉。

這個套筒不屬於 InterNetwork or 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 Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

Connect這個方法會被阻塞,除非你特別在呼叫Blocking之前將屬性設false為 Connect 。 如果你使用像 TCP 這種連線導向協定,並且關閉了封鎖, Connect 我會拋出 a SocketException ,因為它需要時間才能建立連線。 無連線協定不會拋出例外,因為它們只是建立一個預設的遠端主機。 你可以用來 SocketException.ErrorCode 取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。 若錯誤為 WSAEWOLDBLOCK,表示遠端主機連線已被連線導向 Socket發起,但尚未成功完成。 使用該 Poll 方法來判斷何時 Socket 完成連線。

若啟用 IPv6 並 Connect(String, Int32) 呼叫該方法連接同時解析至 IPv6 與 IPv4 位址的主機,則先嘗試連接 IPv6 位址,再嘗試連接 IPv4 位址。 若主機未監聽 IPv6 位址,這可能會延遲建立連線的時間。

Note

如果你使用連線導向協定且在呼叫Bind前未呼叫Connect,底層服務提供者會分配本地網路位址和埠號。 如果你使用無連線協定,服務提供者不會在你完成發送或接收操作前分配本地網路位址和埠號。 如果你想更改預設的遠端主機,請再用想要的端點呼叫 Connect 一次。

Note

如果插座之前已經斷開,那你就無法用這個方法來恢復連線。 使用非同步 BeginConnect 方法之一重新連線。 這是基礎提供者的限制。

Note

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱.NET框架中的網路追蹤。

適用於