关于 网站客户端 ip读取后 取得相应城市问题(转)

现在有很多网站都会在用户登入后 提醒你“欢迎光临某地用户” 这个某地就是我们程序员要解决的问题了 其实这是一个很简单的功能 百分之九十九的程序员能在两个小时内搞定,  呵呵 我这有个已经封装好的类 你直接down过去那不就两分钟搞定吗

    在这其中第一步是我们必需得得到一个ip地址数据库

               第二步就是我们要用一个方法得到用户ip

               第三步就是将用户ip与数据库ip进行比较然后得到相应的城市

 

但就在这个时候就会可能出现一定的问题

              1.ip地址的数据如何比较

               我可以告诉你用一种算法将ip转换成十进制然后再比较

               而这时可能又会出现一定的问题

              2.ip地址一再某个区段就归属于那个城市,所以数据库里  会有一个 起始ip会有一个结束ip  而且你拿到的这些ip都还没有转换成十进制的  试问 你是不是想过  把一个一个ip  split('.')再遍历,那样或许能实现,但效率会很低,实现也会很难

               所以大家在网上下载ip数据库时记得用一个以及把ip转换成十进制的数据库那样 什么事情都很顺利了

               还得说一句:用sql的用户可能在网上能找到能用的数据库 会有一定的困难  网上还会有 其他的比如access数据库  标准的比较多  可以把它导到你的sql表中

               实现代码如下   我是将其作为一个类文件  以后好供人调用

     

 

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

/// <summary>
///GetUserIp 的摘要说明
/// </summary>
public class GetUserIp:Page
{
    string User_ip;
    string City_Ip;
    string User_Well;

    #region  通过动态获取用户ip 将其所在城市调用出来

    #region  最终调用界面
    /// <summary>
    /// 用户调用界面
    /// </summary>
    public void WellCome()
    {
        DataSet WellComeDs =GetCity();
        User_Well = WellComeDs.Tables[0].Rows.Count.ToString();
        if (User_Well != null)
        {
            Response.Write(User_Well + "用户你好!欢迎光临千家网--");
        }
        else
        {
            Response.Write("*无法识别网络Ip*");
        }


    }
    #endregion


    #region  动态获取用户ip 将其转换成string返回  的方法
    /// <summary>
    /// 动态获取用户ip 并将其转换成十进制数据
    /// </summary>
    /// <returns>string</returns>
    public string GetIp()
    {
        User_ip = Request.UserHostAddress.ToString();
        string[] IPArray = User_ip.Split('.');
        long[] IPNum=new long[4];
        for (int i = 0; i < 4;i++ )
        {
            IPNum[i] = long.Parse(IPArray[i].Trim());
        }
        long IPNumTotal = IPNum[0] * 256 * 256 * 256 + IPNum[1] * 256 * 256 + IPNum[2] * 256 + IPNum[3] - 1;
        return IPNumTotal.ToString();
    }

    #endregion


    #region  根据获取ip找到相应城市  赋给一个dataset
    /// <summary>
    /// 根据获取ip找到相应城市  赋给一个dataset
    /// </summary>
    /// <returns>dataset</returns>
    public DataSet GetCity()
    {
        DataSet CityDs = new DataSet();
        City_Ip = GetIp();
        string conn ="server=.;database=Test;uid=sa;pwd=";
        string sql = "SELECT  COUNTRY FROM BBSGOOD_IP WHERE IP2>@HH AND IP1<@HH";
        SqlDataAdapter CitySA = new SqlDataAdapter(sql,conn);
        CitySA.SelectCommand.Parameters.Add(new SqlParameter("@HH", SqlDbType.NVarChar, 15));
        CitySA.SelectCommand.Parameters["@HH"].Value = City_Ip;
        CitySA.Fill(CityDs);

        return CityDs;

    }
    #endregion

    #endregion
}

 

 

 

 

 

代码我都加了很多注释  要有那位盟友有不明白的话  请留言   呵呵  哥们能帮得上一定顶

posted on 2013-02-22 10:43  davidkam  阅读(258)  评论(0编辑  收藏  举报