Классы для работы с сетью в .NET Framework обеспечивают простой доступ к сетевым функциям библиотеки Winsock, встроенной в Windows. .NET определяет два класса в пространстве имен System.Net для работы с IP-адресами: IPAddress и IPEndPoint.
Объект IPAddress используется для представления одиночного IP-адреса. Этот объект может затем использоваться при обращении к методам сокетов.
| Метод | Описание |
|---|---|
| Equals | Сравнивает два IP-адреса |
| GetHashCode | Возвращает хэш-код объекта |
| GetType | Возвращает тип объекта IP-адреса |
| HostToNetworkOrder | Преобразует байтовый порядок IP-адреса из хостового в сетевой |
| IsLoopBack | Показывает является ли IP-адрес адресом обратной связи |
| NetworkToHostOrder | Преобразует байтовый порядок IP-адреса из сетевого в хостовый |
| Parse | Преобразует строку в IP-адрес |
| ToString | Преобразует IP-адрес в строку, представляющую IP-адрес в десятично-точечной нотации |
Метод Parse наиболее часто используется для создания объекта IPAddress по строке, содержащей десятично-точечную нотацию IP-адреса, следующим образом IPAddress newaddress = IPAddress.Parse("192.168.1.1");
Кроме того IPAddress содержит четыре поля только для чтения, представляющих специальные IP-адреса для использования в программах:
Для иллюстрации работы с объектом IPAddress и его методами рекомендуется создать и запустить программу
using System;
using System.Net;
class AddressSample
{
public static void Main ()
{
IPAddress test1 = IPAddress.Parse("192.168.1.1");
IPAddress test2 = IPAddress.Loopback;
IPAddress test3 = IPAddress.Broadcast;
IPAddress test4 = IPAddress.Any;
IPAddress test5 = IPAddress.None;
IPHostEntry ihe =
Dns.GetHostByName(Dns.GetHostName());
IPAddress myself = ihe.AddressList[0];
if (IPAddress.IsLoopback(test2))
Console.WriteLine("The Loopback address is: {0}",
test2.ToString());
else
Console.WriteLine("Error obtaining the loopback address");
Console.WriteLine("The Local IP address is: {0}\n",
myself.ToString());
if (myself == test2)
Console.WriteLine("The loopback address is the same as local address.\n");
else
Console.WriteLine("The loopback address is not the local address.\n");
Console.WriteLine("The test address is: {0}",
test1.ToString());
Console.WriteLine("Broadcast address: {0}",
test3.ToString());
Console.WriteLine("The ANY address is: {0}",
test4.ToString());
Console.WriteLine("The NONE address is: {0}",
test5.ToString());
}
}
Аналогом структуры sockaddr_in в Unix в .NET Framework является объект IPEndPoint, представляющий конкретную комбинацию IP-адреса и порта. Объект IPEndPoint используется при связывании сокетов с локальными адресами или при соединении с удаленными адресами. Для создания объектов IPEndPoint используются два конструктора:
IPEndPoint(long address, int port) IPEndPoint(IPAddress address, int port)
| Метод | Описание |
|---|---|
| Create | Создает объект EndPoint из объекта SocketAddress |
| Equals | Сравнивает два объекта IPEndPoint |
| GetHashCode | Возвращает хэш-значение для объекта IPEndPoint |
| GetType | Возвращает тип объекта IPEndPoint |
| Serialize | Создает объект SocketAddress, соответствующий объекту EndPoint |
| ToString | Создает строковое представление объекта IPEndPoint |
Класс SocketAddress - это специальный класс в пространстве имен System.Net, представляющий сериализованную версию объекта IPEndPoint. Этот класс используется для сохранения экземпляра объекта IPEndPoint, который затем может быть воссоздан с помощью метода IPEndPoint.Create().
В дополнение к перечисленным методам класс IPEndPoint содержит три свойства, которые могут быть установлены или получены для данного экземпляра класса.
Для иллюстрации работы с объектом IPEndPoint и его методами рекомендуется создать и запустить программу
using System;
using System.Net;
class IPEndPointSample
{
public static void Main ()
{
IPAddress test1 = IPAddress.Parse("192.168.1.1");
IPEndPoint ie = new IPEndPoint(test1, 8000);
Console.WriteLine("The IPEndPoint is: {0}", ie.ToString());
Console.WriteLine("The AddressFamily is: {0}", ie.AddressFamily);
Console.WriteLine("The address is: {0}, and the port is: {1}\n", ie.Address, ie.Port);
Console.WriteLine("The min port number is: {0}", IPEndPoint.MinPort);
Console.WriteLine("The max port number is: {0}\n", IPEndPoint.MaxPort);
ie.Port = 80;
Console.WriteLine("The changed IPEndPoint value is: {0}", ie.ToString());
SocketAddress sa = ie.Serialize();
Console.WriteLine("The SocketAddress is: {0}", sa.ToString());
}
}