开发者社区> 小珞珞> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【计算机网络】网络层 : 移动 IP 技术 ( 移动节点 | 本地代理 | 外部代理 | 永久地址 | 转交地址 | 移动 IP 通信过程 )
【计算机网络】网络层 : 移动 IP 技术 ( 移动节点 | 本地代理 | 外部代理 | 永久地址 | 转交地址 | 移动 IP 通信过程 )
99 0
PHP 根据IP获取地理位置
1 /** 2 * 根据用户IP获取用户地理位置 3 * $ip 用户ip 4 */ 5 function get_position($ip){ 6 if(empty($ip)){ 7 return '缺少用户ip'; 8 } 9 $url = 'http://ip.
1388 0
《UNIX网络编程 卷2:进程间通信(第2版)》——2.2 IPC名字
这也许是你第一次碰到snprintf函数。许多现有代码调用的是sprintf,但是sprintf不检查目标缓冲区是否溢出,不过snprintf要求其第二个参数是目标缓冲区的大小,因此可确保缓冲区不溢出。提供能有意溢出一个程序的sprintf缓冲区的输入数据是黑客们已使用很多年的一种攻破系统的方法
1880 0
《UNIX网络编程 卷2:进程间通信(第2版)》——2.4 IPC权限
新的消息队列、有名信号量或共享内存区对象是由其oflag参数中含有O_CREAT标志的mq_open、sem_open或shm_open函数创建的。如图2-4所注,权限位与这些IPC类型的每个对象相关联,就像它们与每个Unix文件相关联一样。
1182 0
腾讯新浪通过IP地址获取当前地理位置(省份)的接口
腾讯的接口是 ,返回数组 http://fw.qq.com/ipaddress   返回值 var IPData = new Array("61.135.152.194","","北京市","");  新浪的接口 : http://int.
853 0
+关注
168
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载