Socket.Connect 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
建立與遠端主機的連線。
多載
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
為 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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
除非您Connect在呼叫 Connect之前特別將 屬性false
設定Blocking為 ,否則方法會封鎖 。 如果您使用 TCP 之類的連線導向通訊協定並停用封鎖,將會擲回, ConnectSocketException 因為它需要時間進行連線。 無連線通訊協定不會擲回例外狀況,因為它們只會建立預設遠端主機。 您可以使用 SocketException.ErrorCode 來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。 如果錯誤傳回 WSAEWOULDBLOCK,遠端主機連線已由連線導向 Socket起始,但尚未成功完成。
Poll使用方法來判斷 Socket 何時完成連接。
注意
如果您使用連線導向通訊協定,且未在呼叫 之前呼叫 BindConnect,則基礎服務提供者會指派局域網路位址和埠號碼。 如果您使用無連線通訊協定,在完成傳送或接收作業之前,服務提供者不會指派局域網路位址和埠號碼。 如果您要變更預設遠端主機,請使用所需的端點再次呼叫 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)
- 來源:
- 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
。
連接埠號碼無效。
嘗試存取通訊端時發生錯誤。
這個方法對於 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 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
遠端主機的連接埠號碼。
例外狀況
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 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
遠端主機的連接埠號碼。
例外狀況
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 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 中的網路追蹤。