今天在看一篇技术帖子 看到最后 留言是这样的形式
格式是
城市+网络接入商名称+IP地址
在我们以前的使用习惯中 如果想留言的话 必须注册成为会员以后 才能留言
说句实话 当我特别想给谋篇文章留言的时候 一看留言板 不需要注册才能留言 我会马上离开这个页面的 绝对不会为了留言 专门注册一个账号的
估计现在的留言板设计成非会员也能留言的模式 就是为了照顾我这样的人的 哈哈。。。。
或说话来 这样的留言形式 确实变得开放多了
其实在很早以前我就看到过这样的形式 只是再没有看到这样的留言形式
今天再次看到了 说什么也要研究一下
查了一下 要实现有两种方式
第一种方式:
下载IP库 每次从IP库中检索留言者的物理地址
第二种方式:
使用第三方IP查找接口
先说一下两种方式的优点和缺点
要根据IP获得物理地址 必须先获得留言用户的IP 这里不讨论
优点:可以实现本地查找 无需联网
缺点:浪费时间 不能及时的更新 如果某个城市的IP地址换了 无法第一时间的更新
第二种方式(使用第三方接口)
优点:节省时间 能获得第一时间的更新的数据
缺点:需要联网
话说回来 既然浏览者可以给你留言 那么就说明你的网站肯定是联网的
换句话说 第二种方式没有缺点
所以 我使用的也是第二种方式
好了 下面开始介绍:
废话不多说 上源码:
为了简单明了 我测试使用的winform应用程序来测试的
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Web;
using System.Text.RegularExpressions;
using System.Collections;
using System.Net;
using System.Xml;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 点击了查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
// 获取用户输入的IP地址
string ip = textBox1.Text;
// 根据IP 显示出物理地址
MessageBox.Show(GetstringIpAddress(ip));
}
/// <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 + "";//youdao的URL
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;
//other
}
}
}
return stringIpAddress;
}
}
}