要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就在同一子网,否则,不在同一子网。
例:假定选择了子网掩码255.255.254.0,现在分别将上述两个IP地址分别与掩码做与运算,如下图所示:
211.95.165.24 11010011 01011111 10100101 00011000
255.255.254.0 11111111 11111111 111111110 00000000
与的结果是: 11010011 01011111 10100100 00000000
211.95.164.78 11010011 01011111 10100100 01001110
255.255.254.0 11111111 11111111 111111110 00000000
与的结果是: 11010011 01011111 10100100 00000000
可以看出,得到的结果(这个结果就是网络地址)都是一样的,因此可以判断这两个IP地址在同一个子网。
代码来实现其实就简单多了,不废话上代码:
//subnetMask可以是这两个ip其中一个的子网掩码
+(BOOL)isSameLANCompareTheIP:(NSString*)ip otherIP:(NSString*)otherIp withSubnetMask:(NSString*)subnetMask{
NSArray *ips = [ip componentsSeparatedByString:@"."];
NSArray *otherIps = [otherIp componentsSeparatedByString:@"."];
NSArray *subnetMasks = [subnetMask componentsSeparatedByString:@"."];
BOOL isSame =YES;
for(inti =0; i<4; i++) {
int ippart = [ips[i] intValue];
int otherIppart = [otherIps[i] intValue];
int subnetMaskpart = [subnetMasks[i] intValue];
int resultip = ippart&subnetMaskpart;
int resultOtherIp = otherIppart&subnetMaskpart;
if(resultip!=resultOtherIp) {
isSame =NO;
return isSame;
}
}
return isSame;
}