在C#网络编程中,主机域名与ip之间能相互转换,同时DNS中有Dns类、IPHostEntry类、IPAddress类、DnsPermission类实现DNS的一些简单功能。
下面主要讲述一个C#的Windows应用程序,实现以下功能:
(1).获取主机名称;
(2).获取本地电脑的ip地址;
(3).输入远程域名www.xxx.com,查询其网址的ip地址;
(4).根据其远程网址的ip地址,查找其物理位置;
(5).根据物理位置实现查找当地位置的天气预报(未实现).
具体步骤如下:
1.创建C#项目
点击”文件”->”新建项目”->”C# Windows应用程序”,选择存储位置与项目名称,创建一个ipAddress项目.
2.添加控件
在”解决方案”中右键Form1.cs,查看其代码设计器.设置如下图所示的控件,界面设计的具体属性如下:

6个Label控件,其Text属性分别对应”主机名称”、”ip地址”..和”天气预报”;
6个textBox控件,其中除”查询远程域名(输入)”是输入形如:www.xxx.com外,其余均是输出相应的获取结果,对应的TextBox1-TextBox6;
1个richTextBox控件,提供高级输入编辑文本功能控件,左边textBox中显示的结果在此处同时显示汇总结果;
2个button控件,分别是”开始查询”和”清除记录”,清空richTextBox中内容.
3.添加新的命名控件
//添加新的命名空间
usingSystem.Net;
usingSystem.IO;
usingSystem.Xml;
在.NET平台对Dns类的命名控件是System.Net:调用其函数方法获取本地名称、ip地址、域名ip间转换.System.IO可以提供编码IO流的操作(似乎没用到),System.Xml是根据ip地址,通过访问”有道”网站查询实际物理位置中获取xml网页等操作使用.
4.双击”开始扫描”按钮,添加相应的事件代码
privatevoidbutton1_Click(objectsender,EventArgse)
{
//添加代码实现具体功能操作,具体如下
}
如果想添加"清除记录"功能,则双击"清除记录"按钮,添加下面代码即可实现:
privatevoidbutton2_Click(objectsender,EventArgse)
{
richTextBox1.Clear(); //清理记录
}
具体代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;//添加新的命名空间
using System.Net;
using System.IO;
using System.Xml;namespace ipAddress
{public partial class Form1 : Form{public Form1(){InitializeComponent();}//点击按钮"开始查询"创建Click事件private void button1_Click(object sender, EventArgs e){//构造一个主机对象 IPHostEntry两个常用属性(AddressList地址列表|HostName主机名称)IPHostEntry myHost = new IPHostEntry();try{//一.通过获取主机名HostName获取主机Host信息myHost = Dns.GetHostByName(Dns.GetHostName()); //textBox1编辑框:显示主机名称textBox1.Text = myHost.HostName.ToString();//richTextBox1高级文本输入编辑控件:AppendText函数追加本地主机信息richTextBox1.AppendText("1.本地主机名称-->"+myHost.HostName.ToString()+"\r");//二.获取本地ip地址for (int i = 0; i < myHost.AddressList.Length; i++){textBox2.Text = myHost.AddressList[i].ToString();richTextBox1.AppendText("2.本地主机ip地址-->"+myHost.AddressList[i].ToString()+"\r");}//三.输入远程ip地址\域名查询 //构造一个远程主机对象和字符串变量strIP存储ip地址IPHostEntry otherHost = new IPHostEntry();int j;//Resolve函数:将域名转换为ip地址 www.baidu.comotherHost = Dns.Resolve(textBox3.Text);//获取远程查询ip地址for (j = 0; j < otherHost.AddressList.Length; j++){textBox4.Text = otherHost.AddressList[j].ToString();richTextBox1.AppendText("3.远程域名-->"+textBox3.Text+"\r*ip地址-->"+otherHost.AddressList[j].ToString()+"\r");}//四.ip地址查找对应的物理位置//通过访问有道网站查询ip的物理位置 (方法二:下载一个ip库,查找ip库中的内容)string sURL = "http://www.youdao.com/smartresult-xml/search.s?type=ip&q=" + otherHost.AddressList[j-1].ToString() + "";  //youdao的URL//定义字符串变量存储物理位置string stringIpAddress = "";//获取youdao返回的xml格式文件内容  using (XmlReader read = XmlReader.Create(sURL)){  while(read.Read())      //从流中读取下一个字节{  switch (read.NodeType)  {  case XmlNodeType.Text:      //取xml格式文件当中的文本内容  查询的是最后一个ip地址AddressList[j-1]if (string.Format("{0}", read.Value).ToString().Trim() != otherHost.AddressList[j-1].ToString())  {  stringIpAddress = string.Format("{0}", read.Value).ToString().Trim();  //赋值  }  break;  }  }  }  //textBox5对话框:赋值物理位置并追加至richTextBox1末尾textBox5.Text = stringIpAddress;richTextBox1.AppendText("4.物理位置-->"+stringIpAddress+"\r");}catch(Exception msg){MessageBox.Show(msg.Message);          //提示错误信息}}private void button2_Click(object sender, EventArgs e){richTextBox1.Clear();                     //清理记录}}
}

5.运行结果
输入www.google.com,点击"开始查询"

输出结果如下图所示:

可以看到,我的主机名称为delldell及本地的ip地址.同时查询的google的相应ip地址很多,在richTextBox中显示远程域名的ip地址,其中物理地址为最后一个ip地址74.125.31.104的物理位置为“美国加利福利亚州山景市谷歌公司”
(注意:天气预报我没有做该功能,但原理相同通过访问一个天气预报的网站,根据物理位置显示相应的天气,原理相同)
6.总结
这是我最近学习C#网络编程的自己编写的一个实例,通过获取ip地址你可以做很多的事情,譬如QQ等网站显示的你所在地天气预报、判断异地登陆、黑客攻击等,这是一个很基础的System.Net\System.Xml的相关方法函数的使用。
而在根据ip地址输出判断其物理位置中使用的是popping_dancer的博客知识,上面的代码“四.ip地址查找对应的物理位置”也是引用转载他的文章,希望大家也能看看他的这篇文章,非常有用。非常感谢博主及他的文章,网址如下:
http://blog.csdn.net/popping_dancer/article/details/8297038
他采用的方法是通过获取ip地址,访问“有道”网址查看对应的物理位置,上面访问google其访问过程如下图所示:

上面仅仅是我对C#网络编程,DNS、域名、ip地址、物理位置转换之间的一些认识,仅供大家学习与了解,如果有错误或不足之处,见谅!希望能帮助大家。
( 2013-7-8 By:Eastmount)

C# 网络编程之获取本机名、ip地址、域名、物理位置相关推荐

  1. 【Win 10 应用开发】获取本机的IP地址

    按照老规矩,也是朋友的建议,老周今天在吹牛之前,先讲一个小故事. 有朋友问我,老周,你现在还发短信吗,你每个月用多少电话费?唉,实话说,现在真的发短信不多了,套餐送的130条短信,每月都发不了一条.至 ...

  2. python项目实战:获取本机所有IP地址的方法

    2019独角兽企业重金招聘Python工程师标准>>> 前言 今天为大家介绍一个利用python获取本机所有IP地址的具体代码,具有一定的参考价值,希望能够帮助到大家,代码如下: 导 ...

  3. C++获取本机的ip地址程序

    C++获取本机的ip地址程序 #include <WinSock2.h> #pragma comment(lib,"ws2_32") //链接到ws2_32动态链接库c ...

  4. 获取本机所有IP地址的方法

    获取本机所有IP地址的方法    java.net包中的IP地址类InetAddress提供了可以获取本机IP地址的方法getLocalHost(),但是通过该方法只能获得第一个网络设备的IP地址.但 ...

  5. java 如何获取本机所有ip地址呢?

    转自: java 如何获取本机所有ip地址呢? ip地址简介: IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址. IP地址是IP协议提供的一种统一 ...

  6. 使用Linux curl命令获取本机公网IP地址

    使用Linux curl命令获取本机公共IP地址 在本教程中,我们将学习如何使用Linux curl命令查找计算机的公共IP地址. 通常,如果我们想要找到我们使用的公共IP地址,我们会去谷歌并搜索&q ...

  7. VB6获取本机所有IP地址公用函数

    因为正好有用到,整了个公用函数,一次获取本机全部IP地址: Option ExplicitPrivate Declare Function WSAstartup Lib "WSOCK32.D ...

  8. Spring boot 获取本机的IP地址mac地址以及电脑名称!

    Spring boot 获取本机的IP地址mac地址以及电脑名称! package com.example.demo;import java.net.InetAddress;import java.n ...

  9. 如何在Node.js中获取本机本地IP地址

    最近在做Cloud related的项目时,遇到一个问题,就是如何在Node.js中获取本机的IP地址.Node.js提供的API中,只能获取本机的hostname. os = require('os ...

最新文章

  1. 物联网安全:LED灯中存在多个安全漏洞
  2. linux下挂载nas存储异常处理
  3. linux tree命令 树结构显示目录文件
  4. EDM HTML编写建议和规范
  5. Python的冷技巧小技巧
  6. [私]-optee的同步方法
  7. Communication boosts value
  8. 为什么多个线程不可能同时抢到一把锁_并发基础理论:原子性问题、锁、管程...
  9. Python实现 QQ 半自动发送情话,我追到了女神
  10. Inception v2/v3原理与实现
  11. java抛出异常齁_解決 Elasticsearch 使用 Java High Level REST Client 時出現 NoClassDefFoundError 錯誤...
  12. Unity容器中AOP应用示例程序
  13. java t输出_java --输入输出
  14. 冒泡、选择和插入排序图解详细分析
  15. 程序员必读书单 1.0
  16. 阿里巴巴招募AI鉴黄体验官,日薪1000,小姐姐优先,快看看你是否符合
  17. linux中dd命令详解,Linux dd命令详解
  18. js设置html打印不分页,web 页面分页打印的实现
  19. 倍加福 vmt视觉识别软件应用
  20. 机房装饰实施方案的评审

热门文章

  1. inner join和outer join的区别
  2. SpringCloud Alibaba-nacos注册中心
  3. 《精益数据分析》-第二部分概括笔记
  4. Photoshop鼠绘精美手机详细教程
  5. Ext 4 概述(一)
  6. 规格模式 Specification Pattern
  7. 优秀的项目经理是如何进行项目管理的
  8. 基于SSM技术的医院在线预约诊疗系统设计与实现毕业设计源码011130
  9. Linux内核的配置和编译
  10. iOS 生成二维码 原生代码