日期:2014-05-20  浏览次数:20995 次

求一个IP地址和子网掩码的校验方法实现方法
输入一个字符串,判断是否是合法的IP地址或子网掩码
IP地址格式(不包括[])
[1-254].[0-254].[0-254].[0-254]

子网掩码为前面是连续的1,然后全是0
转换成2进制是这样

sample:

11111111.11100000.00000000.00000000
10000000.00000000.00000000.00000000
11111111.11111111.11111111.10000000


------解决方案--------------------
public bool 检查IP(string IP)
{
string[] vList = IP.Split( '. ');
if (vList.Length != 4) return false;
for (int j = 0; j < vList.Length; j++)
{
int i;
if (!int.TryParse(vList[j], out i)) return false;
if ((i < 0) || (i > 254)) return false;
if ((i == 0) && (j == 0)) return false;
}
return true;
}

public bool 检查掩码(string 掩码)
{
string[] vList = 掩码.Split( '. ');
if (vList.Length != 4) return false;

bool vZero = false; // 出现0
for (int j = 0; j < vList.Length; j++)
{
int i;
if (!int.TryParse(vList[j], out i)) return false;
if ((i < 0) || (i > 255)) return false;
if (vZero)
{
if (i != 0) return false;
}
else
{
for (int k = 7; k > = 0; k--)
if (((i > > k) & 1) == 0) // 出现0
vZero = true;
else if (vZero) return false; // 不为0
}
}
return true;
}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(检查IP( "1.0.0.127 ").ToString());
MessageBox.Show(检查IP( "261.0.0.127 ").ToString());
MessageBox.Show(检查IP( "0.0.0.127 ").ToString());
MessageBox.Show(检查掩码( "255.252.0.0 ").ToString());
MessageBox.Show(检查掩码( "255.0.0.1 ").ToString());
MessageBox.Show(检查掩码( "255.255.255.255 ").ToString());
}