}
}
}
temp[0]=subnet_mask[i+1]。 //判断字符是否为数值型字符
if(!isdigit(temp[0]>> //isdigit(>为库函数,可以调用 { }
cout<<\中含有非数字的非法字符,error!\。 maskIsValid=false。 //mask不是数值,则设置为false
else if((len-3>==i> //表明mask是二位
{
temp[0]=subnet_mask[i+1]。 temp[1]=subnet_mask[i+2]。
if(!(isdigit(temp[0]> && isdigit(temp[1]>>> { } }
cout<<\中含有非数字的非法字符,error!\。 maskIsValid=false。
mask=atoi(temp>。 //自动把数字字符转换为对应的十进制数值的函数 if(mask<0 || mask>32>
maskIsValid=false。
else //表明mask为空或字节超出范围 { }
strcpy(this->subnet_mask,subnet_mask>。 //给subnet_mask赋值 strcpy(this->ip,ip>。 //给ip赋值
strcpy(this->ip_Temp,ip>。 //给ip_temp赋值
cout<<\为空或超出范围,error!\。
maskIsValid=false。 //若mask是三位数,则表明mask输入非法<其实为~32) /********************************************************************/ //判断mask,subnet,ip的合法性问题 void ipTest::AllJudgment(> {
//设置标志subnet地址是否合法的bool型变量,并调用subnetIsValid函数判断 bool subnetIsV=subnetIsValid(subnet_Temp>。
//设置标记ip地址是否合法的bool型变量,并调用ipIsValid函数判断 bool ipIsV=ipIsValid(ip_Temp>。
//设置标记mask与subnet地址是否匹配的bool型变量,并调用maskIsMatSubnet函数判断 bool maskIsMatSub=maskIsMatSubnet(mask,subnet_Temp>。 cout< if(!maskIsValid> //表示返回的maskIsValid是false /************************判断返回的值是否为真******************/ } { } else { } if(!maskIsMatSub> { } else { } if(!subnetIsV> { } else { } if(!ipIsV> { } else { } //都合法 if(maskIsValid && maskIsMatSub && subnetIsV && ipIsV> { } print(>。 cout<<\地址合法!\。 //表示返回的ipIsV是false cout<<\地址非法!\。 cout<<\地址合法!\。 //表示返回的subnetIsV是false cout<<\地址非法!\。 cout<<\与subnet匹配!\。 //表示返回的maskIsMatSub是false cout<<\与subnet不匹配,error!\。 cout<<\合法!\。 cout<<\输入非法!(mask为整数并在-32范围内>\。 //判断mask与subnet是否匹配 bool ipTest::maskIsMatSubnet(int mask,char *subnet_Temp> { int nbsubnet[4]。//用于放十进制的各段地址 } //调用把单个字符地址转换为十进制数值型地址<含四段)的函数,实现转换 split(subnet_Temp,nbsubnet>。 //subnet是A类地址 if(nbsubnet[0]>0 && nbsubnet[0]<127 && mask<8> { } //subnet是B类地址 if(nbsubnet[0]>=128 && nbsubnet[0]<=191 && mask<16> { //mask的值小于 } //subnet是C类地址 if(nbsubnet[0]>=192 && nbsubnet[0]<=223 && mask<24> { } //mask与subnet地址匹配 return true。 //mask的值小于 cout<<\与subnet不匹配,error!\。 return false。 cout<<\与subnet不匹配,error!\。 return false。 //mask的值小于 cout<<\与subnet不匹配,error!\。 return false。 //把单个字符地址转换为十进制数值型地址<含四段) void ipTest::split(char *chaddr,int *addr> { } //ip,subnet地址中非法字符的判断 bool ipTest::NoIllegalChar(char *ch> { char ch[]=\。 char *token,*dot[4]。 int iplen=0。 token=strtok(chaddr,ch>。 while(token!=NULL> { } dot[iplen]=token。 addr[iplen]=atoi(dot[iplen]>。//atoi(>函数把字符数值转换为int型数值 iplen++。 token=strtok(NULL,ch>。 } int i,len=strlen(ch>。 for(i=0。i return true。 if(ch[i]-'0'>9 || ch[i]-'0'<0> { } return false。 //判断ip是否合法 bool ipTest::ipIsValid(char *ip> { /******************把地址分为四段,保存在dot[]中************/ char ch[]=\。 char ip_one[18]。 strcpy(ip_one,ip>。 char *token,*dot[4]。 int iplen=0。 //库函数strtok(>,以ch[]为界限来分段 token=strtok(ip_one,ch>。 while(token!=NULL> { } if(iplen!=4> { } int j,t=0。 for(j=0。j<=strlen(ip>。j++> { } if(t!=3> { if(ip[j]=='.'> { } t++。 cout<<\地址\的段数不是,error!\。 return false。 dot[iplen]=token。 iplen++。 token=strtok(NULL,ch>。//此时,第一个参数必须换为NULL /*****************判断地址中的段数***************************/ /***************判断地址中的'.'是否正确**********************/ } int i。 cout<<\地址\中的'.'不是,error!\。 return false。 /************************判断地址是否含有非法字符,每段地址数值溢出**********************/ for(i=0。i int flag=1。//首先设置为非法,即全 for(i=0。i if(flag==1> { } flag=1。//首先设置为非法,即全 for(i=0。i if(flag==1> { } cout<<\地址\全为全,error!\。 return false。 if(atoi(dot[i]>!=255> { } flag=0。 cout<<\地址\全为全,error!\。 return false。 if(atoi(dot[i]>!=0> { } //含有非的字段 flag=0。 if(!NoIllegalChar(dot[i]> || atoi(dot[i]>>255> { } if(!NoIllegalChar(dot[i]>> //判断含有非法字符 cout<<\地址\中含有非数字的非法字符,error!\。 cout<<\地址\中含有不在-255间的数字,error!\。 if(atoi(dot[i]>>255> //判断数值溢出 return false。 /*****************判断全或全的情况**************************/