最近在学习计算机网络,遇到根据斜线记法来确定该IP所在子网的信息,包括:子网号、子网掩码、第一个可用IP、最后一个可用IP、广播地址、可用IP数总量。
因为自己在二进制和十进制转换之间反应比较慢,所以自己决定做一个自动计算子网所有信息的小工具软件:IPTool!
下面是截图:
还是像以前一样我会介绍自己的思路和部分代码,希望感兴趣的朋友可以多交流~~
前提:
当然要明白这个小工具的实现方法,你必须会自己得出所有的子网信息,如果你都做不出来,就不可能编写一个工具出来替你完成计算。
思路:
网络号:求网络号就是让给出的IP与斜线后面的网络前缀位数如25,相与即可得结果;
子网掩码:把网络前缀8位一组转化成10进制数就行;
第一个可用地址:网络号加1就是了;
最后一个可用地址:主机号全都变成1,然后减1就是
广播地址:最后一个可用地址加1就是
可用IP数量:2^主机号-2
实现:
ip的各部分添加5个int型成员变量;其余的都为CString。
对于每个编辑控件的设置为UpdateData();TRUE/FALSE参数设置可以参看我的两外介绍VS2010MFC编程文章.
下面列出对网络前缀edit control编写的代码:
主要的想法是:网络前缀/8,保留商和余数,根据商来分别处理5种情况。
建议读者可以把下面的代码复制到VS2010里面,这样的话就有颜色,也比较容易看。
void CIPToolDlg::OnEnChangeEdit5()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialogEx::OnInitDialog()
// function and call CRichEditCt