C# 网络编程 IP地址转换

IP地址

IP地址:是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围内惟一的标识符。一个IP地址主要由两部分组成:网络地址和主机地址。

网络地址由因特网权力机构分配,主机地址由各个网络的管理员统一分配。
IP地址编制方案有两种:IPV4和IPV6IPV4:二进制表示共32位(4个字节)IPV6:二进制表示共128位(16个字节)

在IPV4编制方案中,一般使用点分十进制表示法表示IP地址。例如:192.168.3.1

端口

端口:IP地址仅仅能够具体标识到某台主机,而端口则表示与计算机上的哪个进程通信。

根据IP地址找到是与哪台机器通信,根据端口号找到是与该机器的哪个进程通信。 (一个进程可能会使用多个端口)

端口地址的范围是十进制的0~65535

IPAddress类

IPAddress类(System.Net命名空间下):常用IPAddress的
Parse方法将IP地址字符串转换为IPAddress的实例。
例如:IPAddress ip = IPAddress.Parse(“192.168.1.1”);
构造函数有:

1public IPAddress (byte[] address)
		byte[] iparray = new byte[] { 143,24,20,36 };
		IPAddress localIP = new IPAddress(iparray);2public IPAddress (long newAddress)
		long ip = 0x2414188f;
	    IPAddress localIP = new IPAddress(ip);

在这里插入图片描述

IPEndPoint

IPEndPoint类包含了连接到主机上的服务所需的IP地址和端口信息。
IPEndPoint类常用的构造函数为:
public IPEndPoint(IPAddress, int);
其中第一个参数指定IP地址,第二个参数指定端口号。

IPAddress localip = IPAddress.Parse ("192.168.1.1");
IPEndPoint iep = new IPEndPoint (localip,65000);
listBoxInfo.Items .Add ( "IP地址:" + iep.Address);
listBoxInfo.ltems.Add ("IP端口:" +iep.Port);

IPHostEntry

IPHostEntry类的对象中包含了与主机相关的信息。常用属性:
(1)AddressList属性:获取或设置与主机关联的IP地址列表,是一个IPAddress类型的数组,包含了指定主机的所有IP地址;
(2)HostName属性:包含了服务器的主机名。
(3)Aliases属性包含了与主机关联的别名列表。
在Dns类中,有一个专门获取IPHostEntry对象的方法。
例如:IPAddress[] ips = Dns.GetHostEntry(“http://news.sohu.com").AddressList;

DNS

DNS(Domain Name System,域名系统)提供了一系列静态的方法,用于获取提供本地或远程域名等功能,常用方法有:
(1)GetHostAddresses方法
获取指定主机的IP地址,返回一个IPAddress类型的数组。格式为:
public static IPAddress[] GetHostAddresses(string hostNameOrAddress);
例如:IPAddress[] ips=Dns.GetHostAddresses(“www.cctv.com”);
注意:如果hostNameOrAddress是IP地址,则不查询DNS服务器,直接返回此地址。

(2)GetHostEntry方法
在DNS服务器中查询与某个主机名或IP地址关联的IP地址。
当参数为空字符串时,此方法返回本地主机的IPv4地址和主机名。
例如:
IPHostEntry host = Dns.GetHostEntry("");
listBox1.Items.AddRange(host.AddressList); //本机所有IPv4地址
listBox1.Items.Add(host.HostName); //本机主机名

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

示例

/// <summary>
        /// 获取本机IP信息
        /// </summary>
        private void buttonLocalIP_Click(object sender, EventArgs e)
        {
            listBoxLocalInfo.Items.Clear();
            string name = Dns.GetHostName();
            listBoxLocalInfo.Items.Add("本机主机名:" + name);
            IPHostEntry me = Dns.GetHostEntry(name);
            listBoxLocalInfo.Items.Add("本机所有IP地址:");
            foreach (IPAddress ip in me.AddressList)
            {
                listBoxLocalInfo.Items.Add(ip);
            }
            IPAddress localip = IPAddress.Parse("127.0.0.1");
            IPEndPoint iep = new IPEndPoint(localip, 80);
            listBoxLocalInfo.Items.Add("IP端点: " + iep.ToString());
            listBoxLocalInfo.Items.Add("IP端口: " + iep.Port);
            listBoxLocalInfo.Items.Add("IP地址: " + iep.Address);
            listBoxLocalInfo.Items.Add("IP地址族: " + iep.AddressFamily);
            listBoxLocalInfo.Items.Add("可分配端口最大值: " + IPEndPoint.MaxPort);
            listBoxLocalInfo.Items.Add("可分配端口最小值: " + IPEndPoint.MinPort);
        }
        /// <summary>
        /// 获取远程主机信息
        /// </summary>
        private void buttonRemoteIP_Click(object sender, EventArgs e)
        {
            
            this.listBoxRemoteInfo.Items.Clear();
            IPHostEntry remoteHost = Dns.GetHostEntry(this.textBoxRmoteIP.Text);
            IPAddress[] remoteIP = remoteHost.AddressList;
            IPEndPoint iep;
            foreach (IPAddress ip in remoteIP)
            {
                iep = new IPEndPoint(ip, 80);
                listBoxRemoteInfo.Items.Add(iep);
            }
        }

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值