从http://topic.csdn.net/u/20100810/12/19bcf715-c72c-4000-be85-38d5797860ea.html知道怎么判断ip大小的方法了,但是这个是写死了ip地址,我想先判断出地址,然后和数据库中的两个ip地址去进行大小比较。 private long getIpNum(String ipAddress)
{
String[] ip = ipAddress.Split(new char[] { '.' });
long a = int.Parse(ip[0]);
long b = int.Parse(ip[1]);
long c = int.Parse(ip[2]);
long d = int.Parse(ip[3]); return a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
} private bool isInner(long clientIp, long begin, long end)
{
return (clientIp >= begin) && (clientIp <= end);
} 调用方式是:
long ip = getIpNum("60.162.200.10");
long start_ip = getIpNum("60.162.200.0");
long end_ip = getIpNum("60.162.201.255"); if (isInner(ip, start_ip, end_ip))
{
Response.Write("<script>alert('是');history.back()</script>");
}
else
{
Response.Write("<script>alert('不是');history.back()</script>");
} 这样是没问题,可是我希望long ip = getIpNum("60.162.200.10");处的60.162.200.10是取一个label控件的值
lblIp.Text = Page.Request.UserHostAddress;
我把调用方式的long ip = getIpNum("60.162.200.10");改成了long ip = getIpNum("lblIp.Text");
可是这样出错,getIpNum中的
String[] ip = ipAddress.Split(new char[] { '.' });
long a = int.Parse(ip[0]);
long b = int.Parse(ip[1]);
只有两个数了,a=lblIp,b=Text。请问这里应该怎么写呢?
{
String[] ip = ipAddress.Split(new char[] { '.' });
long a = int.Parse(ip[0]);
long b = int.Parse(ip[1]);
long c = int.Parse(ip[2]);
long d = int.Parse(ip[3]); return a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
} private bool isInner(long clientIp, long begin, long end)
{
return (clientIp >= begin) && (clientIp <= end);
} 调用方式是:
long ip = getIpNum("60.162.200.10");
long start_ip = getIpNum("60.162.200.0");
long end_ip = getIpNum("60.162.201.255"); if (isInner(ip, start_ip, end_ip))
{
Response.Write("<script>alert('是');history.back()</script>");
}
else
{
Response.Write("<script>alert('不是');history.back()</script>");
} 这样是没问题,可是我希望long ip = getIpNum("60.162.200.10");处的60.162.200.10是取一个label控件的值
lblIp.Text = Page.Request.UserHostAddress;
我把调用方式的long ip = getIpNum("60.162.200.10");改成了long ip = getIpNum("lblIp.Text");
可是这样出错,getIpNum中的
String[] ip = ipAddress.Split(new char[] { '.' });
long a = int.Parse(ip[0]);
long b = int.Parse(ip[1]);
只有两个数了,a=lblIp,b=Text。请问这里应该怎么写呢?
/// <summary>
/// IP地址和数字之间转化的算法 /// </summary>
/// <param name="ipAddress">传入IP地址</param>
/// <returns></returns> public static uint IPToInt(string ipAddress)
{
string disjunctiveStr = ".,: ";
char[] delimiter = disjunctiveStr.ToCharArray();
string[] startIP = null;
for (int i = 1; i <= 5; i++)
{
startIP = ipAddress.Split(delimiter, i);
}
string a1 = startIP[0].ToString();
string a2 = startIP[1].ToString();
string a3 = startIP[2].ToString();
string a4 = startIP[3].ToString();
uint U1 = uint.Parse(a1);
uint U2 = uint.Parse(a2);
uint U3 = uint.Parse(a3);
uint U4 = uint.Parse(a4);
uint U = U1 << 24;
U += U2 << 16;
U += U3 << 8;
U += U4;
return U;
}
/// <summary>
/// 数字和IP地址之间转化的算法
/// </summary>
/// <param name="ipAddress">传入IP地址</param>
/// <returns></returns>
public static string IntToIP(uint ipAddress)
{
long ui1 = ipAddress & 0xFF000000;
ui1 = ui1 >> 24;
long ui2 = ipAddress & 0x00FF0000;
ui2 = ui2 >> 16;
long ui3 = ipAddress & 0x0000FF00;
ui3 = ui3 >> 8;
long ui4 = ipAddress & 0x000000FF;
string IPstr = "";
IPstr = System.Convert.ToString(ui1) + "." + System.Convert.ToString(ui2) + "." + System.Convert.ToString(ui3) + "." + System.Convert.ToString(ui4);
return IPstr;
}
把long ip = getIpNum("lblIp.Text");改成long ip = getIpNum(lblIp.Text);就可以了
另外还有个问题,因为begin和end的地址在数据库里,必须把值取出来赋给隐藏的控件吗,有没有getelementbyid之类的方法,有的话怎么写呢?
能详细讲讲吗,我就是不知道怎么把这个地址传过去啊,现在能想到的办法就是先从数据库里取出来,然后赋值给一个隐藏的label,然后再去读这个label的值,有简单一点的方法吗