C# 网络编程之通过ip地址获取地理位置(补充)

简介:

前面我写过一篇文章"C# 网络编程之获取本机名、ip地址、域名、物理位置"里面可以根据输入的网址根据其ip地址获取器物理位置,其中该部分主要代码是通过有道网提供的在线第三方接口实现动态获取它的数据.引用popping_dancer的博客代码,其主要代码如下图所示:

/// <summary>
/// 根据IP 获取物理地址
/// </summary>
/// <param name="strIP"></param>
/// <returns></returns>
public static string GetstringIpAddress(string strIP) //strIP为IP
{
    string sURL = "http://www.youdao.com/smartresult-xml/search.s?type=ip&q=" + strIP + "";
    string stringIpAddress = "";                     //地理位置
    using (XmlReader read = XmlReader.Create(sURL))  //获取youdao返回的xml格式文件内容
    {
        while (read.Read())                          //从流中读取下一个字节
        {
            switch (read.NodeType)
            {
                case XmlNodeType.Text:               //取xml格式文件当中的文本内容
                    if (string.Format("{0}", read.Value).ToString().Trim() != strIP)
                    {
                        stringIpAddress=string.Format("{0}", read.Value).ToString().Trim();
                    }
                    break;
            }
        }
    }
    return stringIpAddress;
}

当时获取的结果如下图所示,但是可能由于有道已经删除该URL网址,现在已经不能通过该接口获取地理位置.所有我又提供了一种新的方法,希望能帮助到大家和那位朋友.

 

由于能力有限,只会通过访问第三方接口获取物理地址,而且很大程度上取决于该网站提供的库数据,如果采用访问本地静态的库查找相应的地理位置,也不太适用.现在访问的网址是:http://www.freegeoip.net/xml/ 

 

源代码及显示的结果如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;     //Xml文档

namespace GetLocation
{
    class Program
    {
        static void Main(string[] args)
        {
            string strIP = "74.125.31.104";                            //ip地址
            string strURL = "http://www.freegeoip.net/xml/" + strIP;   //网址URL
            string Location = "";                                      //物理位置
            //通过GetElementsByTagName获取标签结点集合
            XmlDocument doc = new XmlDocument();                     //Xml文档
            doc.Load(strURL);                                        //加载strURL指定XML数据
            XmlNodeList nodeLstCity = doc.GetElementsByTagName("City"); //获取标签
            Location = "获取单个物理位置:" + nodeLstCity[0].InnerText + "";
            Console.WriteLine(Location);
            //通过SelectSingleNode匹配匹配第一个节点
            XmlNode root = doc.SelectSingleNode("Response");
            if (root != null)
            {
                string CountryName = (root.SelectSingleNode("CountryName")).InnerText;
                string RegionName = (root.SelectSingleNode("RegionName")).InnerText;
                string City = (root.SelectSingleNode("City")).InnerText;
                Location="国家名称:"+CountryName+"\n区域名称:"+RegionName+"\n城市名称:"+City;
                Console.WriteLine(Location);
            }
            Console.Read();
        }
    }
}

文章主要通过GetElementsByTagName和SelectSingleNode两种方法获取Xml文档中提取标签Tag,获取http://www.freegeoip.net/xml/www.baidu.com中的物理位置.推荐大家学习C#中读取Xml文件制定结点的知识.运行结果如下图所示:

下面提供一些这方面的有些非常优秀的内容仅供大家学习,同时也方便自己下次查阅:
1.C# 网络编程之获取本机名\IP地址\域名\物理位置 (这是我自己的文章,结合该篇文章学习)
http://blog.csdn.net/eastmount/article/details/9270221
2.Get user location by IP address(使用C#获取物理位置 也是该篇文章的基础)
http://www.codeproject.com/Questions/686644/Get-user-location-by-IP-address
3.获取电脑物理地址以及通过IP地址获取当前地理位置的接口-抢街饭的专栏(使用PHP获取非常优秀的文章)
http://blog.csdn.net/lzwjavaphp/article/details/6972667
4.IP Address Location In ASP.NET(consume a free online API and fetch data using LINQ To XML)
http://www.dotnetcurry.com/showarticle.aspx?ID=325
5.get uesr location by ip address(关于它的讨论 希望大家去Stack Overflow学习知识)
http://stackoverflow.com/questions/4327629/get-user-location-by-ip-address
 6.XmlDocument.Load(url)问题(读取天气信息文章,与我的方法相同)
http://www.cnblogs.com/sharpfeng/archive/2011/03/02/1968666.html
最后希望该篇文章对大家有所帮助,同时希望该文章能帮助那位同学解决问题.如果文章中错误或不足之处,见谅!由于只会采用这种通过第三方接口的方法获取物理位置,很大程度依赖与第三方的数据,如果该网址被废除,很麻烦,同时会遇到不同网址查询结果也不同.希望有好的方法可以讨论分享.
(By:Eastmount 2014-1-22 下午5点 http://blog.csdn.net/eastmount

目录
相关文章
|
3月前
|
网络协议 网络性能优化 Python
在Python中进行TCP/IP网络编程
在Python中进行TCP/IP网络编程
38 6
|
18天前
|
缓存 网络协议 网络架构
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
22 1
|
4月前
|
网络协议 Linux 数据处理
网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)
网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)
92 3
|
4天前
|
网络协议 Linux Android开发
计算机网络:MAC地址 & IP地址 & ARP协议
计算机网络:MAC地址 & IP地址 & ARP协议
26 7
【专栏】子网划分在现代网络工程中的重要性,包括管理网络、增强安全性和优化IP地址使用
【4月更文挑战第28天】本文介绍了子网划分在现代网络工程中的重要性,包括管理网络、增强安全性和优化IP地址使用。文章阐述了子网划分的原理,如通过子网掩码划分广播域以减少网络风暴。接着,详细说明了子网划分的方法,涉及需求分析、选择子网掩码、计算子网及广播地址等步骤,并提到了VLSM和CIDR等高效技术。最后,通过实例展示了如何进行子网划分,强调实践对于掌握这项技能的关键作用。学习子网划分能提升网络管理和设计能力。
|
16天前
|
监控 负载均衡 网络协议
|
16天前
|
网络协议 Linux iOS开发
|
27天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
1月前
|
域名解析 监控 网络协议
Linux网卡与IP地址:通往网络世界的通行证 🌐
探索Linux网卡与IP地址关系,理解网卡作为网络通信的关键。Linux网卡需配置IP地址以实现唯一标识、通信、路由、安全管理和网络服务。无IP地址时,网卡在特定情况如局域网服务、网络监控、无线认证和网络启动可有限工作,但通用功能受限。配置IP地址通常通过`ifconfig`(传统)或`ip`(现代)命令,永久配置需编辑网络配置文件。配置错误如IP冲突、子网掩码错误、默认网关和DNS配置不当可能导致服务中断、网络拥堵、安全漏洞和数据丢失。重视网络配置的正确与安全至关重要。
Linux网卡与IP地址:通往网络世界的通行证 🌐
|
3月前
|
网络协议 网络安全 网络虚拟化
网络技术基础(4)——IP地址规划
【2月更文挑战第8天】网络基础笔记