C#中IPAddress类/Dns类/IPHostEntry类/IPEndPoint用法简介

IP是一种普遍应用于因特网、允许不同主机能够相互找到对方的寻址协议。IP地址由4个十进制的数字号码所组成,而每一个号码的值介于0~255之间,它虽然解决了网络上计算机的识别问题,但是IP地址确不容易记,因此域名系统(DNS)被开发出来,它专门用于将IP地址转换成有意义的文字,以方便识别记忆。

  .Net FrameWork类库内置了相关类用于处理IP地址的问题,这些类在System.NET命名空间下。这里主要对DNS类进行详细介绍。

IPAddress类提供了对IP地址的转换、处理等功能。其Parse方法可将IP地址字符串转换为IPAddress实例。

如:IPAddress ip = IPAddress.Parse(“192.168.1.1”);

IPAddress   类提供了7个只读字段:

Any        表示本地系统可用的任何IP地址

Broadcast   表示本地网络的IP广播地址

IPv6Any    Socket.Bind方法用此字段指出本地系统可用的IP地址

IPv6Loopback    表示系统的回送地址

IPv6None     表示系统上没有可用的网络接口

Loopback    表示系统的回送地址

None   表示系统上没有可用的网络接口

Dns类提供了一系列静态的方法,用于获取提供本地或远程域名等功能,常用方法有:

1) GetHostAddresses方法

获取指定主机的IP地址,返回一个IPAddress类型的数组。

函数原形为:

public static IPAddress[] GetHostAddresses(string hostNameOrAddress);

例如:

IPAddress[] ip=Dns.GetHostAddresses("www.cctv.com");

listBox1.Items.AddRange(ip);

2) GetHostName方法

获取本机主机名。例如:string hostname = Dns.GetHostName();

IPHostEntry类的实例对象中包含了Internet主机的相关信息。

常用属性有:AddressList属性和HostName属性。

AddressList属性作用:获取或设置与主机关联的IP地址列表,是一个IPAddress类型的数组,包含了指定主机的所有IP地址;HostName属性则包含了服务器的主机名。

在Dns类中,有一个专门获取IPHostEntry对象的方法,通过IPHostEntry对象,可以获取本地或远程主机的相关IP地址。

  例如:

listBox1.Items.Add("搜狐新闻所用的服务器IP地址有:");

IPAddress[] ip = Dns.GetHostEntry("news.sohu.com").AddressList;

listBox1.Items.AddRange(ip);

listBox1.Items.Add("本机IP地址为:");

ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList;

listBox1.Items.AddRange(ip);

在C#中,IPEndPoint类包含了应用程序连接到主机上的服务所需的IP地址和端口信息。

IPEndPoint类常用的构造函数为:public IPEndPoint(IPAddress, int);

     其中第一个参数指定IP地址,第二个参数指定端口号。

C#中IPAddress和IPEndPoint的关系 

IP addresses in C#

在.Net网络库里面最大的优点就是IP地址和端口被成对处理,相比于UNIX中用的方法真是一个巨大的令人欢迎的进步。.NET定义了两个类来处理关于IP地址的问题。

One of the biggestadvantages you will notice in the .NET network library is the way IPaddress/port pairs are handled. It is a fairly straightforward process thatpresents a welcome improvement over the old, confusing UNIX way. .NET definestwo classes in the System.Net namespace to handle various types of IP address information:

·        IPAddress

·        IPEndPoint

IPAddress

一个IP地址对象用来表示一个单一的IP地址,其值同时也可以应用在许多不同的方法里面。

An IPAddress object isused to represent a single IP address. This value is then used in varioussocket methods to represent the IP address. The default constructor for IPAddress is asfollows:

publicIPAddress(long address)

实际上,默认的构造函数几乎是用不到的,因为在该类里面许多的函数可以用来构造并操作IP地址对象。其中Parser()函数经常用来构造该类。

The defaultconstructor takes a long value and converts it to an IPAddress value. In practice, the default isalmost never used. Instead, several methods in the IPAddress class can beused to create and manipulate IP addresses. The Parse() method is often used to create IPAddress instances:

IPAddressnewaddress = IPAddress.Parse("192.168.1.1");

IPEndPoint

.NET框架用IPEndPoint 对象来表示一个特定的IP地址和端口的组合,应用该对象的场景多是在讲socket绑定到本地地址或者将socket绑定到非本地地址。

The .NET Frameworkuses the IPEndPoint object to represent a specific IP address/port combination. An IPEndPoint object isused when binding sockets to local addresses, or when connecting sockets toremote addresses.

实例解析:

IPAddress是ip,如“127.0.0.1”

IPEndPoint是ip和端口对的组合,如“127.0.0.1:80”

·        IPAddress

构造一个IP地址对象IPAddress的构造函数是

public

IPAddress(long address)

但通常情况下用不到它,因为有简单的方法可以使用如:

方法1:

IPAddress.Any

方法2:

IPAddress.Parse("192.168.1.1");

IPAddress.Any使用你机器上一个可用ip来初始化这个IP地址对象。

IPAddress.Parse("192.168.1.1");创建IPAddress对象的一个选择

·        IPEndPoint (IP地址和端口的组合)

创建方式如:两个参数分别表示IP地址和端口号

IPEndPoint ipEndPoint=new IPEndPoint(IPAddress.Any,2112)

例:  IPAddress类、Dns类、IPHostEntry类和IPEndPoint类的使用方法。

下面对比较重要的方法进行详细介绍。

  (1)GetHostAddresses方法

  返回指定主机的Internet协议(IP)地址。

  语法:

1
2
3
public
static IPAddress[] GetHostAddresses (
 
string hostNameOrAddress
)

  参数:

  hostNameOrAddress:要解析的主机名或IP地址。

  返回值:一个IPAddress类型的数组,该类型保存由hostNameOrAddress参数指定的主机的IP地址。

  (2)GetHostByAddress方法

  获取IP地址的DNS主机信息(以发生成重载),重载方法为为Dns.GetHostByAddress (IPAddress)和Dns.GetHostByAddress (String),下面分别进行介绍。

  l     Dns.GetHostByAddress (IPAddress)

  根据指定的IPAddress创建IPHostEntry实例。

  语法:

1
2
3
4
public
static IPHostEntry GetHostByAddress
(
 
IPAddress address
)

  参数:

  address:一个IPAddress。

  返回值:一个IPHostEntry。

  l     Dns.GetHostByAddress (String)

  根据IP地址创建IPHostEntry实例。

  语法:

1
2
3
4
public
static IPHostEntry GetHostByAddress
(
 
string address
)

  参数:

  address:IP地址。

  返回值:一个IPHostEntry实例。

  (3)GetHostName方法

  获取本地计算机的主机名。

  语法:

  public static string GetHostName ()

  返回值:包含本地计算机的DNS主机名的字符串。

  (4)Resolve方法

  将DNS主机名或IP地址解析为IPHostEntry实例。

  语法:

1
2
3
4
public
static IPHostEntry Resolve
(
 
string hostName
)

  参数:

  hostName:DNS样式的主机名或IP地址。

  返回值:一个IPHostEntry实例,包含有关hostName中指定的主机的地址信息。

  下面列举几种常用的DNS类的使用方法。

  获得主机名的实现代码如下:

1
2
3
4
5
6
7
private
void button1_Click(object sender, EventArgs e)
 {
   String
hostName = Dns.GetHostName();
   IPHostEntry
ipH = new IPHostEntry();
   ipH
= Dns.Resolve(hostName);
   this.textBox1.Text
= hostName;
 }

  根据IP或计算机名获得计算机名的实现代码如下:

1
2
3
4
5
6
private
void button2_Click(object sender, EventArgs e)
   {
     IPHostEntry
hostInfo = Dns.Resolve(this.textBox1.Text.Trim().ToString());
     string
strHost = hostInfo.HostName.ToString();
     MessageBox.Show(strHost);
   }

  获得IP列表的实现代码如下:

1
2
3
4
5
6
7
private
void button4_Click(object sender, EventArgs e)
    {
      IPHostEntry
IPH = Dns.GetHostByName(this.textBox1.Text);
      IPAddress[]
myIp = IPH.AddressList;
      foreach
(IPAddress ips in myIp)
        MessageBox.Show(ips.ToString());
    }
<br><br> // DNS类:在.net中的System.net命名空间下,主要的功能是从
Internet 域名系统 (DNS) 检索关于特定主机的信息。<
br> // IPHostEntry类:将一个域名系统
(DNS) 主机与一组别名和一组匹配的 IP 地址关联,和DNS类一起使用。
<br> // IPAddress
类:IP 网络上的地址。
<br><br>1、一个域名只能绑定一个网站,多个域名可以绑定同一个站点
<br>2、一个域名可以免费分出10个子域名,超过10要另收费,每个子域名都是相互独立的
<br>3、子域名的申请和解悉都要到你的域名所在服务商(万网\新网\其它)提供的域名管理平台上操作
<br>4、子域名绑定要在空间服务商的平台下操作
<br>5、如果只有一个空间,可以考虑URL重写

C#中IPAddress类/Dns类/IPHostEntry类/IPEndPoint用法简介的更多相关文章

  1. Java中unicode增补字符(辅助平面)相关用法简介

    转载自 http://blog.csdn.net/gjb724332682/article/details/51324036 前言 Java从1.5版本开始,加入了unicode辅助平面的支持.相关的 ...

  2. Servlet和JSP中的过滤器都是Java类

    JSP 过滤器 Servlet和JSP中的过滤器都是Java类,它们存在的目的如下: 在请求访问后端资源时拦截它 管理从服务器返回给客户端的响应 下面列出了多种常用的过滤器类型: 认证过滤器 数据压缩 ...

  3. 创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。

    创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法). ackage com.chuoji.text01; pub ...

  4. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  5. 在lua脚本中使用我们自定义的精灵类

    首先创建cocos2dx-lua项目,然后在项目中添加我们的自定义精灵类:这里Himi类名为:HSprite // // HSprite.h // cocos2dx_lua_tests_by_Himi ...

  6. 理解是最好的记忆方法 之 CSS中a链接的④个伪类为何有顺序

    理解是最好的记忆方法 之 CSS中a链接的④个伪类为何有顺序 在CSS中,a标签有4种伪类,分别为: a:link, a:visited, a:hover, a:active 对其稍有了解的前端er都 ...

  7. 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能

    编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...

  8. Java中如何使封装自己的类,建立并使用自己的类库?

    转自:http://blog.csdn.net/luoweifu/article/details/7281494 随着自己的编程经历的积累会发现往往自己在一些项目中写的类在别的项目中也会有多次用到.你 ...

  9. XCode中的单元测试:编写测试类和方法(内容意译自苹果官方文档)

    当你在工程中通过测试导航栏添加了一个测试target之后, xcode会在测试导航栏中显示该target所属的测试类和方法. 这一章演示了怎么创建测试类,以及如何编写测试方法. 测试targets, ...

随机推荐

  1. GIMP如何制作一只大佬猫头像

    新建文件File -> 设置宽度为24px,高度5px:高级选项中将背景图片设置为无色 使用铅笔,前景色设为黑色,画出眼镜的模样,画出反光效果:将前景色设为灰色 放大图片,右击空白区域-> ...

  2. Yii2 HelloWord

    一.安装Yii2 可以直接官网或github下载: https://github.com/yiisoft/yii2 下载完后进入项目的web/目录,入口文件为该目录下的index.php,这里直接启用 ...

  3. 【Linux命令】nohup和&差异,查看进程和终止进程!

    最近在开发dueros的技能,官方提供的PHPSDK中有多个实力,而运行实例的命令如下是 nohup php -S 0.0.0.0:8029 myindex.php & 从命令来看,肯定是在8 ...

  4. 【php】函数重载问题

    PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数.

  5. /dev/sda is apparently in use by the system; will not make a filesystem here!解决方法

    /dev/sda  is apparently in use by the system; will not make a filesystem here! 翻译:系统显然在使用,不会在这里做文件系统 ...

  6. java模糊关键字查询

    通过前台页面上传到后台的查询条件和关键字去数据库中进行查询,先在数据库中写好sql语句,数据库利用的是LIKE这个关键词进行查询的,然后就是dao层service层的调用,这条语句返回的是一个user ...

  7. 蓝桥杯Java输入输出相关

    转载自:http://blog.csdn.net/Chen_Tongsheng/article/details/53354169 一.注意点 1. 类名称必须采用public class Main方式 ...

  8. .NET开发时让人头痛的SESSION超时

    前言 不知道大家在使用用.NET的SESSION的时候有没有遇到过很奇怪的问题,不时候不知道怎么回事,这个SESSION就无缘无故的丢失了 怎么也想不通,不是说SESSION很可靠的吗?这个问题要好好 ...

  9. [Oracle] Lob介绍

    [Oracle] Lob介绍   像Oracle这种关系型数据库,比较擅长处理结构化的数据,那么对于非结构化的数据,Oracle是怎么处理和存储的呢?Lob (Large Object)是Oracle ...

  10. jmeter返回的Unicode转换成utf8

    该问题通过查找资料借鉴前辈门的经验得到了解决,记录下来是为了后面能够用到 最近发现有些接口返回的时unicode类型的,如下图所示: 因此只需要在jmeter中添加后置处理器:BeanShell Po ...