程序开始,变量初始化 读取一个字符串 是否都是数 字字符 Y N return N段数=4? YY调用ipIsValid 函数 每段的值是否大于255 N 输出”ip地址非法” NipIsValid(subnet)是否为真 Y输出”子网非法” Mask是否在(0,32)范围内 YNIp&Mask==subnet YN 子网号与掩码不匹配 输出”掩码非法” 程序结束 五.程序运行结果
(1)在命令提示窗口中输入命令:ip_test 202.113.16.0/24 202.113.16.10 结果如下:
这个结果表示所输入的子网及ip地址是合法的 (2)判断ip地址无效
①在命令提示窗口中输入命令:ip_test 202.113.16.0/24 202.113.16.1% 结果如下:
该结果表示所输入ip地址无效,因为ip地址中有无效字符“%”。
②在命令提示窗口中输入命令:ip_test 202.113.16.0/24 202.113.16.10.10 结果如下:
由命令可以很明显的看出ip地址过长,说明该程序算法正确。 (3)判断掩码的有效性
①在命令提示窗口中输入命令:ip_test 202.113.16.0/2a 202.113.16.10 结果如下:
很显然,掩码中含有“a”,不合法。
②在命令提示窗口中输入命令:ip_test 202.113.16.0/33 202.113.16.10 结果如下:
因掩码不能长于32位,上提示掩码无效进一步说明该算法的正确性。 (4)判断ip地址是否属于该子网
①在(1)中是该ip地址属于该子网的情况
②在命令提示窗口中输入命令:ip_test 202.113.16.0/24 202.113.15.10,显然该ip地址不属于该子网。 结果如下:
该结果符合我们的预想。 (5)提示子网号全0或全1
①在命令提示窗口中输入命令:ip_test 0.0.0.0/24 202.113.16.10 结果如下:
②在命令提示窗口中输入命令:ip_test 255.255.255.0/24 202.113.15.10 结果如下:
(6)判断主机号全0或全1
①在命令提示窗口中输入命令:ip_test 202.113.16.0/24 202.113.16.0 结果如下:
②在命令提示窗口中输入命令:ip_test 202.113.16.0/24 202.113.16.255 结果如下:
以上现象充分说明该算法是完全正确的。
六、课程设计小结
为期两天的计算机网络课程设计就这样结束了,在整个设计过程中我们遇到了各种意想不到的问题,遍尝了各种滋味,既享受到成功的欢欣,有品尝到失败的懊恼,总之,充满了艰辛,一路上磕磕跘跘,甚是不易。
一开始,老师要我们选择课程设计题目,我们选择了 “IP地址的合法性及子网判断”这个题目!
但是,当我们大伙坐下来仔细分析题目时,发现这并没有我们当初想的那么简单,首先,在考虑IP地址(subnet子网地址原理相同)非法的情况时,我们就漏掉了几种情况。
最后,当我们输入命令行进行运行时,却发现不管我们输入的子网地址是否合法,运行结果都显示:subnet is invalid。我们分析了很久也找不到原因,无奈我们再一次寻求同学的帮助。他只是把整个程序大致浏览了一下就发现了错误,原来我们把char ip[15],char subnetPlusMask[18],char subnet[18],char TempIp[15]这几个变量设置成了私有变量,导致后面的程序不能访问。把代码按老师的指导修改后,调试,运行显示的结果准确无误,这才把课程设计的核心——编写源代码搞定。
平常我们都只顾对理论的学习,而没花时间进行实践,课程设计为我们提供了一个把理论知识进行实践的绝好机会,课程设计要求我们既动手有动脑,即要独立思考又要团队配合,锻炼我们的分析实际问题,解决实际问题的能力,提高我们适应实际,实践的能力。
一言以蔽之,我们既要强调对理论知识的学习,又要注重实践,在实践过程中加强对理论知识的理解,使实践与理论学习形成良性循环。
最后,真诚地感谢老师的指导。
七.参考文献
[1]张尧学,郭国强,王晓春,赵艳标。计算机网络与Internet教程[第2版]。清华大学出版社,2006,11。
[2]吴功宜,胡晓英,张仁,何云,王宁。计算机网络课程设计。机械工业出版社,2005,9。 八.附录:课程设计原代码
#include
#include
#pragma comment(lib,\//类结构 class ipTest{ public:
char ip[15];
char subnetPlusMask[18]; char subnet[18]; char TempIp[15];
l maskIsValid;
int mask; char Tempsub[18];
ipTest(char *,char *); } ; //主函数
void main(int argc,char * argv[]){
if(argc!=3){ //判断参数格式化是否正确
cout<<\~ipTest(){};
bool NoIllegalChar(char *); //非法字符的判断 bool ipIsValid(char *); //判断IP地址是否合法 bool subnetIsValid(char *); //判断子网号是否合法 void belong(); //判断IP是否为子网成员 print();