Export (0) Print
Expand All

IPEndPoint Class

Represents a network endpoint as an IP address and a port number.

Namespace:  System.Net
Assembly:  System (in System.dll)

'Declaration
<SerializableAttribute> _
Public Class IPEndPoint _
	Inherits EndPoint
'Usage
Dim instance As IPEndPoint

The IPEndPoint class contains the host and local or remote port information needed by an application to connect to a service on a host. By combining the host's IP address and port number of a service, the IPEndPoint class forms a connection point to a service.

' This example uses the IPEndPoint class and its members to display the home page  
' of the server selected by the user. 

Imports System
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 'displayEndpointInfo

      ' 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 'showusage

      ' 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 'Main

    End Class 'TestIPEndPoint
  End Module 
End Namespace
// This example uses the IPEndPoint class and its members to display the home page 
// of the server selected by the user.

#using <mscorlib.dll>
#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( S"GET / HTTP/1.1\r\nHost: {0}\r\nConnection: Close\r\n\r\n", server );
   Byte ByteGet[] = ASCII->GetBytes(Get);
   Byte RecvBytes[] = new Byte[256];
   String* strRetPage = 0;

   Socket* socket = 0;

   // Recreate the connection endpoint from the serialized information.
   IPEndPoint* endpoint = new IPEndPoint((__int64)0,0);
   IPEndPoint* clonedIPEndPoint = dynamic_cast<IPEndPoint*> (endpoint->Create(socketAddress));
   Console::WriteLine(S"clonedIPEndPoint: {0}", clonedIPEndPoint);

   Console::WriteLine(S"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(S"Source : {0}", e->Source);
      Console::WriteLine(S"Message : {0}", e->Message);
   }
   catch(Exception* e)
   {
      Console::WriteLine(S"Source : {0}", e->Source);
      Console::WriteLine(S"Message : {0}", e->Message);
   }

   if (socket == 0)
      return (S"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( S"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(S"Endpoint.Serialize() : {0}", socketAddress);

   Console::WriteLine(S"Socket->Family : {0}", __box(socketAddress->Family));
   Console::WriteLine(S"Socket->Size : {0}", __box(socketAddress->Size));

   Console::WriteLine(S"Press any key to continue.");
   Console::ReadLine();

   return socketAddress;
}

void displayEndpointInfo(IPEndPoint* endpoint)
{
   Console::WriteLine(S"Endpoint->Address : {0}", endpoint->Address);
   Console::WriteLine(S"Endpoint->AddressFamily : {0}", __box(endpoint->AddressFamily));
   Console::WriteLine(S"Endpoint->Port : {0}", __box(endpoint->Port));
   Console::WriteLine(S"Endpoint.ToString() : {0}", endpoint);

   Console::WriteLine(S"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 = 0;
   IPHostEntry* host = 0;
   SocketAddress* serializedSocketAddress = 0;

   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 = __try_cast<IPAddress*>(myEnum->Current);
         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(S"Source : {0}", e->Source);
      Console::WriteLine(S"Message : {0}", e->Message);
   }
   catch(Exception* e)
   {
      Console::WriteLine(S"Source : {0}", e->Source);
      Console::WriteLine(S"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 = 0;

   // Get a socket address using the specified server and port.
   SocketAddress* socketAddress = getSocketAddress(server, port);

   if (socketAddress == 0)
      strRetPage = S"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.
void showUsage() 
{
   Console::WriteLine(S"Enter the server name as follows:");
   Console::WriteLine(S"\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() 
{
   String* args[] = Environment::GetCommandLineArgs();

   String* host= 0;
   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(S"^[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(S"Input string format not allowed.");
   }

}

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Supported in: 3.5, 2.0, 1.0

Community Additions

ADD
Show:
© 2014 Microsoft