IPEndPoint 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將網路端點表示成 IP 位址和連接埠號碼。
public ref class IPEndPoint : System::Net::EndPoint
public class IPEndPoint : System.Net.EndPoint
[System.Serializable]
public class IPEndPoint : System.Net.EndPoint
type IPEndPoint = class
inherit EndPoint
[<System.Serializable>]
type IPEndPoint = class
inherit EndPoint
Public Class IPEndPoint
Inherits EndPoint
- 繼承
- 屬性
範例
// This example uses the IPEndPoint class and its members to display the home page
// of the server selected by the user.
#using <System.dll>
using namespace System;
using namespace System::Text;
using namespace System::IO;
using namespace System::Net;
using namespace System::Net::Sockets;
using namespace System::Text::RegularExpressions;
// The getPage function gets the server's home page content by
// recreating the server's endpoint from the original serialized endpoint.
// Then it creates a new socket and connects it to the endpoint.
String^ getPage( String^ server, SocketAddress^ socketAddress )
{
//Set up variables and string to write to the server.
Encoding^ ASCII = Encoding::ASCII;
String^ Get = String::Format( "GET / HTTP/1.1\r\nHost: {0}\r\nConnection: Close\r\n\r\n", server );
array<Byte>^ByteGet = ASCII->GetBytes( Get );
array<Byte>^RecvBytes = gcnew array<Byte>(256);
String^ strRetPage = nullptr;
Socket^ socket = nullptr;
// Recreate the connection endpoint from the serialized information.
IPEndPoint^ endpoint = gcnew IPEndPoint( (__int64)0,0 );
IPEndPoint^ clonedIPEndPoint = dynamic_cast<IPEndPoint^>(endpoint->Create( socketAddress ));
Console::WriteLine( "clonedIPEndPoint: {0}", clonedIPEndPoint );
Console::WriteLine( "Press any key to continue." );
Console::ReadLine();
try
{
// Create a socket object to establish a connection with the server.
socket = gcnew Socket( endpoint->AddressFamily,SocketType::Stream,ProtocolType::Tcp );
// Connect to the cloned end point.
socket->Connect( clonedIPEndPoint );
}
catch ( SocketException^ e )
{
Console::WriteLine( "Source : {0}", e->Source );
Console::WriteLine( "Message : {0}", e->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "Source : {0}", e->Source );
Console::WriteLine( "Message : {0}", e->Message );
}
if ( socket == nullptr )
return ("Connection to cloned endpoint failed");
// Send request to the server.
socket->Send( ByteGet, ByteGet->Length, static_cast<SocketFlags>(0) );
// Receive the server home page content.
Int32 bytes = socket->Receive( RecvBytes, RecvBytes->Length, static_cast<SocketFlags>(0) );
// Read the first 256 bytes.
strRetPage = String::Format( "Default HTML page on {0}:\r\n", server );
strRetPage = String::Concat( strRetPage, ASCII->GetString( RecvBytes, 0, bytes ) );
while ( bytes > 0 )
{
bytes = socket->Receive( RecvBytes, RecvBytes->Length, static_cast<SocketFlags>(0) );
strRetPage = String::Concat( strRetPage, ASCII->GetString( RecvBytes, 0, bytes ) );
}
socket->Close();
return strRetPage;
}
// The serializeEndpoint function serializes the endpoint and returns the
// SocketAddress containing the serialized endpoint data.
SocketAddress^ serializeEndpoint( IPEndPoint^ endpoint )
{
// Serialize IPEndPoint details to a SocketAddress instance.
SocketAddress^ socketAddress = endpoint->Serialize();
// Display the serialized endpoint information.
Console::WriteLine( "Endpoint.Serialize() : {0}", socketAddress );
Console::WriteLine( "Socket->Family : {0}", socketAddress->Family );
Console::WriteLine( "Socket->Size : {0}", socketAddress->Size );
Console::WriteLine( "Press any key to continue." );
Console::ReadLine();
return socketAddress;
}
void displayEndpointInfo( IPEndPoint^ endpoint )
{
Console::WriteLine( "Endpoint->Address : {0}", endpoint->Address );
Console::WriteLine( "Endpoint->AddressFamily : {0}", endpoint->AddressFamily );
Console::WriteLine( "Endpoint->Port : {0}", endpoint->Port );
Console::WriteLine( "Endpoint.ToString() : {0}", endpoint );
Console::WriteLine( "Press any key to continue." );
Console::ReadLine();
}
// The serializeEndpoint function determines the server endpoint and then
// serializes it to obtain the related SocketAddress object.
// Note that in the for loop a temporary socket is created to ensure that
// the current IP address format matches the AddressFamily type.
// In fact, in the case of servers supporting both IPv4 and IPv6, an exception
// may arise if an IP address format does not match the address family type.
SocketAddress^ getSocketAddress( String^ server, int port )
{
Socket^ tempSocket = nullptr;
IPHostEntry^ host = nullptr;
SocketAddress^ serializedSocketAddress = nullptr;
try
{
// Get the object containing Internet host information.
host = Dns::Resolve( server );
// Obtain the IP address from the list of IP addresses associated with the server.
System::Collections::IEnumerator^ myEnum = host->AddressList->GetEnumerator();
while ( myEnum->MoveNext() )
{
IPAddress^ address = safe_cast<IPAddress^>(myEnum->Current);
IPEndPoint^ endpoint = gcnew IPEndPoint( address,port );
tempSocket = gcnew Socket( endpoint->AddressFamily,SocketType::Stream,ProtocolType::Tcp );
tempSocket->Connect( endpoint );
if ( tempSocket->Connected )
{
// Display the endpoint information.
displayEndpointInfo( endpoint );
// Serialize the endpoint to obtain a SocketAddress object.
serializedSocketAddress = serializeEndpoint( endpoint );
break;
}
else
continue;
}
// Close the temporary socket.
tempSocket->Close();
}
catch ( SocketException^ e )
{
Console::WriteLine( "Source : {0}", e->Source );
Console::WriteLine( "Message : {0}", e->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "Source : {0}", e->Source );
Console::WriteLine( "Message : {0}", e->Message );
}
return serializedSocketAddress;
}
// The requestServerHomePage function obtains the server's home page and returns
// its content.
String^ requestServerHomePage( String^ server, int port )
{
String^ strRetPage = nullptr;
// Get a socket address using the specified server and port.
SocketAddress^ socketAddress = getSocketAddress( server, port );
if ( socketAddress == nullptr )
strRetPage = "Connection failed"; // Obtain the server's home page content.
else
strRetPage = getPage( server, socketAddress );
return strRetPage;
}
// Show to the user how to use this program when wrong input parameters are entered.
void showUsage()
{
Console::WriteLine( "Enter the server name as follows:" );
Console::WriteLine( "\tcs_ipendpoint servername" );
}
// This is the program entry point. It allows the user to enter
// a server name that is used to locate its current homepage.
int main()
{
array<String^>^args = Environment::GetCommandLineArgs();
String^ host = nullptr;
int port = 80;
// Define a regular expression to parse user's input.
// This is a security check. It allows only
// alphanumeric input string between 2 to 40 character long.
Regex^ rex = gcnew Regex( "^[a-zA-Z]\\w{1,39}$" );
if ( args->Length < 2 )
showUsage();
else
{
String^ message = args[ 1 ];
if ( (rex->Match(message))->Success )
{
host = args[ 1 ];
// Get the specified server home_page and display its content.
String^ result = requestServerHomePage( host, port );
Console::WriteLine( result );
}
else
Console::WriteLine( "Input string format not allowed." );
}
}
// This example uses the IPEndPoint class and its members to display the home page
// of the server selected by the user.
using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text.RegularExpressions;
namespace Mssc.Services.ConnectionManagement
{
public class TestIPEndPoint
{
// The getPage method gets the server's home page content by
// recreating the server's endpoint from the original serialized endpoint.
// Then it creates a new socket and connects it to the endpoint.
private static string getPage(string server, SocketAddress socketAddress)
{
//Set up variables and string to write to the server.
Encoding ASCII = Encoding.ASCII;
string Get = "GET / HTTP/1.1\r\nHost: " + server +
"\r\nConnection: Close\r\n\r\n";
Byte[] ByteGet = ASCII.GetBytes(Get);
Byte[] RecvBytes = new Byte[256];
String strRetPage = null;
Socket socket = null;
// Recreate the connection endpoint from the serialized information.
IPEndPoint endpoint = new IPEndPoint(0,0);
IPEndPoint clonedIPEndPoint = (IPEndPoint) endpoint.Create(socketAddress);
Console.WriteLine("clonedIPEndPoint: " + clonedIPEndPoint.ToString());
Console.WriteLine("Press any key to continue.");
Console.ReadLine();
try
{
// Create a socket object to establish a connection with the server.
socket =
new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
// Connect to the cloned end point.
socket.Connect(clonedIPEndPoint);
}
catch(SocketException e)
{
Console.WriteLine("Source : " + e.Source);
Console.WriteLine("Message : " + e.Message);
}
catch(Exception e)
{
Console.WriteLine("Source : " + e.Source);
Console.WriteLine("Message : " + e.Message);
}
if (socket == null)
return ("Connection to cloned endpoint failed");
// Send request to the server.
socket.Send(ByteGet, ByteGet.Length, 0);
// Receive the server home page content.
Int32 bytes = socket.Receive(RecvBytes, RecvBytes.Length, 0);
// Read the first 256 bytes.
strRetPage = "Default HTML page on " + server + ":\r\n";
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
while (bytes > 0)
{
bytes = socket.Receive(RecvBytes, RecvBytes.Length, 0);
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
}
socket.Close();
return strRetPage;
}
// The serializeEndpoint method serializes the endpoint and returns the
// SocketAddress containing the serialized endpoint data.
private static SocketAddress serializeEndpoint(IPEndPoint endpoint)
{
// Serialize IPEndPoint details to a SocketAddress instance.
SocketAddress socketAddress = endpoint.Serialize();
// Display the serialized endpoint information.
Console.WriteLine("Endpoint.Serialize() : " + socketAddress.ToString());
Console.WriteLine("Socket.Family : " + socketAddress.Family);
Console.WriteLine("Socket.Size : " + socketAddress.Size);
Console.WriteLine("Press any key to continue.");
Console.ReadLine();
return socketAddress;
}
private static void displayEndpointInfo(IPEndPoint endpoint)
{
Console.WriteLine("Endpoint.Address : " + endpoint.Address);
Console.WriteLine("Endpoint.AddressFamily : " + endpoint.AddressFamily);
Console.WriteLine("Endpoint.Port : " + endpoint.Port);
Console.WriteLine("Endpoint.ToString() : " + endpoint.ToString());
Console.WriteLine("Press any key to continue.");
Console.ReadLine();
}
// The serializeEndpoint method determines the server endpoint and then
// serializes it to obtain the related SocketAddress object.
// Note that in the for loop a temporary socket is created to ensure that
// the current IP address format matches the AddressFamily type.
// In fact, in the case of servers supporting both IPv4 and IPv6, an exception
// may arise if an IP address format does not match the address family type.
private static SocketAddress getSocketAddress(string server, int port)
{
Socket tempSocket = null;
IPHostEntry host = null;
SocketAddress serializedSocketAddress = null;
try
{
// Get the object containing Internet host information.
host = Dns.Resolve(server);
// Obtain the IP address from the list of IP addresses associated with the server.
foreach(IPAddress address in host.AddressList)
{
IPEndPoint endpoint = new IPEndPoint(address, port);
tempSocket =
new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
tempSocket.Connect(endpoint);
if(tempSocket.Connected)
{
// Display the endpoint information.
displayEndpointInfo(endpoint);
// Serialize the endpoint to obtain a SocketAddress object.
serializedSocketAddress = serializeEndpoint(endpoint);
break;
}
else
{
continue;
}
}
// Close the temporary socket.
tempSocket.Close();
}
catch(SocketException e)
{
Console.WriteLine("Source : " + e.Source);
Console.WriteLine("Message : " + e.Message);
}
catch(Exception e)
{
Console.WriteLine("Source : " + e.Source);
Console.WriteLine("Message : " + e.Message);
}
return serializedSocketAddress;
}
// The requestServerHomePage method obtains the server's home page and returns
// its content.
private static string requestServerHomePage(string server, int port)
{
String strRetPage = null;
// Get a socket address using the specified server and port.
SocketAddress socketAddress = getSocketAddress(server, port);
if (socketAddress == null)
strRetPage = "Connection failed";
else
// Obtain the server's home page content.
strRetPage = getPage(server, socketAddress);
return strRetPage;
}
// Show to the user how to use this program when wrong input parameters are entered.
private static void showUsage()
{
Console.WriteLine("Enter the server name as follows:");
Console.WriteLine("\tcs_ipendpoint servername");
}
// This is the program entry point. It allows the user to enter
// a server name that is used to locate its current homepage.
public static void Main(string[] args)
{
string host= null;
int port = 80;
// Define a regular expression to parse user's input.
// This is a security check. It allows only
// alphanumeric input string between 2 to 40 character long.
Regex rex = new Regex(@"^[a-zA-Z]\w{1,39}$");
if (args.Length < 1)
{
showUsage();
}
else
{
string message = args[0];
if ((rex.Match(message)).Success)
{
host = args[0];
// Get the specified server home_page and display its content.
string result = requestServerHomePage(host, port);
Console.WriteLine(result);
}
else
{
Console.WriteLine("Input string format not allowed.");
}
}
}
}
}
' This example uses the IPEndPoint class and its members to display the home page
' of the server selected by the user.
Imports System.Text
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Text.RegularExpressions
Namespace Mssc.Services.ConnectionManagement
Module M_TestIPEndPoint
Public Class TestIPEndPoint
'The getPage method gets the server's home page content by
'recreating the server's endpoint from the original serialized endpoint.
'Then it creates a new socket and connects it to the endpoint.
Private Shared Function getPage(ByVal server As String, ByVal socketAddress As SocketAddress) As String
'Set up variables and String to write to the server.
Dim ASCII As Encoding = Encoding.ASCII
Dim [Get] As String = "GET / HTTP/1.1" + ControlChars.Cr + ControlChars.Lf + "Host: " + server + ControlChars.Cr + ControlChars.Lf + "Connection: Close" + ControlChars.Cr + ControlChars.Lf + ControlChars.Cr + ControlChars.Lf
Dim ByteGet As [Byte]() = ASCII.GetBytes([Get])
Dim RecvBytes(255) As [Byte]
Dim strRetPage As [String] = Nothing
Dim socket As Socket = Nothing
' Recreate the connection endpoint from the serialized information.
Dim endpoint As New IPEndPoint(0, 0)
Dim clonedIPEndPoint As IPEndPoint = CType(endpoint.Create(socketAddress), IPEndPoint)
Console.WriteLine(("clonedIPEndPoint: " + clonedIPEndPoint.ToString()))
Console.WriteLine("Press any key to continue.")
Console.ReadLine()
Try
' Create a socket object to establish a connection with the server.
socket = New Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
' Connect to the cloned end point.
socket.Connect(clonedIPEndPoint)
Catch e As SocketException
Console.WriteLine(("Source : " + e.Source))
Console.WriteLine(("Message : " + e.Message))
Catch e As Exception
Console.WriteLine(("Source : " + e.Source))
Console.WriteLine(("Message : " + e.Message))
End Try
If socket Is Nothing Then
Return "Connection to cloned endpoint failed"
End If
' Send request to the server.
socket.Send(ByteGet, ByteGet.Length, 0)
' Receive the server home page content.
Dim bytes As Int32 = socket.Receive(RecvBytes, RecvBytes.Length, 0)
' Read the first 256 bytes.
strRetPage = "Default HTML page on " + server + ":" + ControlChars.Cr + ControlChars.Lf
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes)
While bytes > 0
bytes = socket.Receive(RecvBytes, RecvBytes.Length, 0)
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes)
End While
socket.Close()
Return strRetPage
End Function 'getPage
' The serializeEndpoint method serializes the endpoint and returns the
' SocketAddress containing the serialized endpoint data.
Private Shared Function serializeEndpoint(ByVal endpoint As IPEndPoint) As SocketAddress
' Serialize IPEndPoint details to a SocketAddress instance.
Dim socketAddress As SocketAddress = endpoint.Serialize()
' Display the serialized endpoint information.
Console.WriteLine("Endpoint Serialize() : " + socketAddress.ToString())
Console.WriteLine("Socket Family : " + socketAddress.Family.ToString())
Console.WriteLine("Socket Size : " + socketAddress.ToString())
Console.WriteLine("Press any key to continue.")
Console.ReadLine()
Return socketAddress
End Function 'serializeEndpoint
Private Shared Sub displayEndpointInfo(ByVal endpoint As IPEndPoint)
Console.WriteLine("Endpoint Address : " + endpoint.Address.ToString())
Console.WriteLine("Endpoint AddressFamily : " + endpoint.AddressFamily.ToString())
Console.WriteLine("Endpoint Port : " + endpoint.Port.ToString())
Console.WriteLine("Endpoint ToString() : " + endpoint.ToString())
Console.WriteLine("Press any key to continue.")
Console.ReadLine()
End Sub
' The following method determines the server endpoint and then
' serializes it to obtain the related SocketAddress object.
' Note that in the for loop a temporary socket is created to ensure that
' the current IP address format matches the AddressFamily type.
' In fact, in the case of servers supporting both IPv4 and IPv6, an exception
' may arise if an IP address format does not match the address family type.
Private Shared Function getSocketAddress(ByVal server As String, ByVal port As Integer) As SocketAddress
Dim tempSocket As Socket = Nothing
Dim host As IPHostEntry = Nothing
Dim serializedSocketAddress As SocketAddress = Nothing
Try
' Get the object containing Internet host information.
host = Dns.Resolve(server)
' Obtain the IP address from the list of IP addresses associated with the server.
Dim address As IPAddress
For Each address In host.AddressList
Dim endpoint As New IPEndPoint(address, port)
tempSocket = New Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
tempSocket.Connect(endpoint)
If tempSocket.Connected Then
' Display the endpoint information.
displayEndpointInfo(endpoint)
' Serialize the endpoint to obtain a SocketAddress object.
serializedSocketAddress = serializeEndpoint(endpoint)
Exit For
End If
Next address
'Close the temporary socket.
tempSocket.Close()
Catch e As SocketException
Console.WriteLine(("Source : " + e.Source))
Console.WriteLine(("Message : " + e.Message))
Catch e As Exception
Console.WriteLine(("Source : " + e.Source))
Console.WriteLine(("Message : " + e.Message))
End Try
Return serializedSocketAddress
End Function 'getSocketAddress
' The requestServerHomePage obtains the server's home page and returns
' its content.
Private Shared Function requestServerHomePage(ByVal server As String, ByVal port As Integer) As String
Dim strRetPage As [String] = Nothing
' Get a socket address using the specified server and port.
Dim socketAddress As SocketAddress = getSocketAddress(server, port)
If socketAddress Is Nothing Then
strRetPage = "Connection failed"
' Obtain the server's home page content.
Else
strRetPage = getPage(server, socketAddress)
End If
Return strRetPage
End Function 'requestServerHomePage
' Show to the user how to use this program when wrong input parameters are entered.
Private Shared Sub showusage()
Console.WriteLine("Enter the server name as follows:")
Console.WriteLine(ControlChars.Tab + "vb_ipendpoint servername")
End Sub
' This is the program entry point. It allows the user to enter
' a server name that is used to locate its current homepage.
Public Shared Sub Main(ByVal args() As String)
Dim host As String = Nothing
Dim port As Integer = 80
'Define a regular expression to parse user's input.
'This is a security check. It allows only
'alphanumeric input string between 2 to 40 character long.
Dim rex As New Regex("^[a-zA-Z]\w{1,39}$")
If args.Length = 0 Then
' Show how to use this program.
showusage()
Else
host = args(0)
If ((rex.Match(host)).Success) Then
' Get the specified server home_page and display its content.
Dim result As String = requestServerHomePage(host, port)
Console.WriteLine(result)
Else
Console.WriteLine("Input string format not allowed.")
End If
End If
End Sub
End Class
End Module
End Namespace
備註
類別 IPEndPoint 包含應用程式連線至主機上服務所需的主機和本機或遠端埠資訊。 藉由結合主機的IP位址和服務的埠號碼,類別會 IPEndPoint 形成服務的連接點。
建構函式
IPEndPoint(Int64, Int32) |
使用指定的位址和通訊埠編號來初始化 IPEndPoint 類別的新執行個體。 |
IPEndPoint(IPAddress, Int32) |
使用指定的位址和通訊埠編號來初始化 IPEndPoint 類別的新執行個體。 |
欄位
MaxPort |
指定可指派給 Port 屬性的最大值。 MaxPort 值設為 0x0000FFFF。 此欄位為唯讀。 |
MinPort |
指定可指派給 Port 屬性的最小值。 此欄位為唯讀。 |
屬性
Address |
取得或設定端點的 IP 位址。 |
AddressFamily |
取得網際網路通訊協定 (IP) 位址家族。 |
Port |
取得或設定端點的通訊埠編號。 |
方法
Create(SocketAddress) |
從通訊端 (Socket) 位址建立端點。 |
Equals(Object) | |
GetHashCode() |
傳回 IPEndPoint 執行個體的雜湊值。 |
GetType() |
取得目前執行個體的 Type。 (繼承來源 Object) |
MemberwiseClone() |
建立目前 Object 的淺層複製。 (繼承來源 Object) |
Parse(ReadOnlySpan<Char>) |
將表示為唯讀範圍的 IP 網路端點 (位址和連接埠) 轉換成 IPEndPoint 執行個體。 |
Parse(String) |
將表示為字串的 IP 網路端點 (位址和連接埠) 轉換成 IPEndPoint 執行個體。 |
Serialize() |
將端點資訊序列化為 SocketAddress 執行個體。 |
ToString() |
傳回指定端點的 IP 位址和通訊埠編號。 |
TryParse(ReadOnlySpan<Char>, IPEndPoint) |
嘗試將以唯讀範圍表示的 IP 網路端點 (位址和連接埠) 轉換為其對等 IPEndPoint,並傳回指出轉換是否成功的值。 |
TryParse(String, IPEndPoint) |
嘗試將以字串表示的 IP 網路端點 (位址和連接埠) 轉換為其對等 IPEndPoint,並傳回指出轉換是否成功的值。 |