package KeChengSheJi;
import java.io.*;
public class ZiWang2{
public static void main(String [] args)throws IOException{
String ip; //用于接收IP
String mask;//用于接收子网掩码
int ai1=0;
int ai2=0;
int ai3=0;
int bi1=0;
int bi2=0;
int ci=0;
int b_i=0;
int a_i1=0;
int a_i2=0;
int a_i3=0;
System.out.println("---------------划分子网---------------"); //输入要划分的IP地址:ip
System.out.println("请输入网络地址(格式为:x1.x2.x3.x4):");
System.out.print("→:");
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
ip = br.readLine();
if(ip.indexOf(".") == -1){ //得到‘.’字符所在的位置,-1表示不存在
System.out.println("输入错误,请使用‘.’作为分隔符,请检查输入!");
return;
}
//截取x1
int index1 = ip.indexOf('.'); //得到‘.’字符所在的位置
String st1 = ip.substring(0,index1); //得到从0开始到index1结束的内容,即(0~index1-1)
int x1=Integer.parseInt(st1);//把String类型的st转化成int型
//截取x2
int index2= ip.indexOf('.',index1+1); //ip.indexOf('.',index1+1)表示从index1+1的位置开始寻找字符‘.’。
String st2 = ip.substring(index1+1,index2); //得到从index1+1开始到index2结束的内容,即(index1+1~index2-1)
int x2=Integer.parseInt(st2);//把String类型的st转化成int型
//截取x3
int index3= ip.indexOf('.',index2+1); //ip.indexOf('.',index2+1)表示从index2+1的位置开始寻找字符‘.’。
String st3 = ip.substring(index2+1,index3); //得到从index2+1开始到index3结束的内容,即(index2+1~index3-1)
int x3=Integer.parseInt(st3);//把String类型的st转化成int型
//截取x4
String st4 = ip.substring(index3+1,ip.length()); //得到从index3+1开始到字符串结束的内容,即(index3+1~ip.length())
int x4=Integer.parseInt(st4);//把String类型的st转化成int型
//判断IP是否合法
if(x1<0 || x2<0 ||x3<0||x4<0){
System.out.println("输入错误,x1 x2 x3 x4不为负数,请检查输入!");
return;
}
System.out.println("请输入子网掩码(格式为:m1.m2.m3.m4):");
System.out.print("→:");
mask = br.readLine();
//判断子网掩码分隔符
if(mask.indexOf(".") == -1){ //得到‘.’字符所在的位置,-1表示不存在
System.out.println("输入错误,请使用‘.’作为分隔符,请检查输入!");
return;
}
//截取m1
int index_m1 = mask.indexOf('.'); //得到‘.’字符所在的位置
String mst1 = mask.substring(0,index_m1); //得到从0开始到index_m1结束的内容,即(0~index_m1-1)
int m1=Integer.parseInt(mst1);//把String类型的st转化成int型
//截取m2
int index_m2= mask.indexOf('.',index_m1+1); //mask.indexOf('.',index_m1+1)表示从index_m1+1的位置开始寻找字符‘.’。
String mst2 = mask.substring(index_m1+1,index_m2); //得到从index_m1+1开始到index_m2结束的内容,即(index_m1+1~index_m2-1)
int m2=Integer.parseInt(mst2);//把String类型的st转化成int型
//截取m3
int index_m3= mask.indexOf('.',index_m2+1); //mask.indexOf('.',index_m2+1)表示从index_m2+1的位置开始寻找字符‘.’。
String mst3 = mask.substring(index_m2+1,index_m3); //得到从index_m2+1开始到index_m3结束的内容,即(index_m2+1~index_m3-1)
int m3=Integer.parseInt(mst3);//把String类型的st转化成int型
//截取m4
String mst4 = mask.substring(index_m3+1,mask.length()); //得到从index_m3+1开始到字符串结束的内容,即(index_m3+1~mask.length())
int m4=Integer.parseInt(mst4);//把String类型的st转化成int型
//判断子网掩码是否合法
if(m1<0 || m2<0 ||m3<0||m4<0){
System.out.println("输入错误,请检查输入!");
return;
}
if(m4!=0){
if(m1!=255||m2!=255||m3!=255){ //若m4!=0,说明m1=m2=m3=255,即(255.255.255.m4)
System.out.println("输入错误,请检查输入!");
return;
}
}
if(m3!=255&&m3!=0){
if(m1!=255||m2!=255||m4!=0){ //若(m3!=255&&m3!=0),说明m1=m2=255,m4=0,即(255.255.m3.0)
System.out.println("输入错误,请检查输入!");
return;
}
}
if(m2!=255&&m2!=0){
if(m1!=255||m3!=0||m4!=0){ //若(m2!=255&&m2!=0),说明m1=255,m3=m4=0,即(255.m2.0.0)
System.out.println("输入错误,请检查输入!");
return;
}
}
//判断A、B、C类
//A类
if(x1>0&&x1<=126){
System.out.println("本IP地址为:A类 ");
int ab_m2=Integer.parseInt(Integer.toBinaryString(m2)); //将m2从十进制转化成2进制并且转化成整形
int ab_m3=Integer.parseInt(Integer.toBinaryString(m3)); //将m3从十进制转化成2进制并且转化成整形
int ab_m4=Integer.parseInt(Integer.toBinaryString(m4)); //将m4从十进制转化成2进制并且转化成整形
if(m2!=255){ //地址掩码第二位小于255的情况
String a1_zhujiwei=String.valueOf(11111111-ab_m2); //String.valueOf(11111111-ab_m2)表示将二进制运算的结果装化成字符串
int a1_zhujiweishu=a1_zhujiwei.length()+16;//主机位数
int a1_ziwangweishu=8-a1_zhujiwei.length();//子网位数
double a1_ziwangshu=Math.pow(2,a1_ziwangweishu);//子网数,Math.pow(2,a1_ziwangweishu)表示幂次计算,即(2^(a1_ziwangweishu))
System.out.println("子网数为: "+a1_ziwangshu);
System.out.println("");
double a1_zhujishu=Math.pow(2, a1_zhujiweishu)-2;//每个子网的主机数,Math.pow(2,a1_ziwangweishu)表示幂次计算,即(2^(a1_ziwangweishu))
System.out.println("每个子网的主机数为: "+a1_zhujishu);
System.out.println("");
int a1_ziwangzengliang=256-m2;//子网增量
while(ai1<=m2){ //地址掩码第二位小于255的情况,循环m2%a1_ziwangzengliang+1c次
System.out.println("有效子网:"+st1+"."+ai1+"."+st3+"."+st4); //有效子网
System.out.println("广播地址:"+st1+"."+(ai1+a1_ziwangzengliang-1)+"."+255+"."+255);//每个子网的广播地址
System.out.println("IP范围 :"+st1+"."+ai1+"."+0+"."+1+"~"+st1+"."+(ai1+a1_ziwangzengliang-1)+"."+255+"."+254);//IP范围
System.out.println("");
ai1=ai1+a1_ziwangzengliang;
}
}
else if(m2==255&&m3!=255 ){
String a2_zhujiwei=String.valueOf(11111111-ab_m3); //String.valueOf(11111111-ab_m3)表示将二进制运算的结果装化成字符串
int a2_zhujiweishu=a2_zhujiwei.length()+8;//主机位数
int a2_ziwangweishu=8-a2_zhujiwei.length()+8;//子网位数
double a2_ziwangshu=Math.pow(2,a2_ziwangweishu);//子网数,Math.pow(2,a2_ziwangweishu)表示幂次计算,即(2^(a2_ziwangweishu))
System.out.println("子网数为: "+a2_ziwangshu);
System.out.println("");
double a2_zhujishu=Math.pow(2, a2_zhujiweishu)-2;//每个子网的主机数,Math.pow(2,a2_ziwangweishu)表示幂次计算,即(2^(a2_ziwangweishu))
System.out.println("每个子网的主机数为: "+a2_zhujishu);
System.out.println("");
int a2_ziwangzengliang=256-m3;//子网增量
while(a_i1<256){
ai2=0;
while(ai2<=m3){
System.out.println("有效子网:"+st1+"."+a_i1+"."+ai2+"."+st4); //有效子网
System.out.println("广播地址:"+st1+"."+a_i1+"."+(ai2+a2_ziwangzengliang-1)+"."+255);//每个子网的广播地址
System.out.println("IP范围 :"+st1+"."+a_i1+"."+ai2+"."+1+"~"+st1+"."+a_i1+"."+(ai2+a2_ziwangzengliang-1)+"."+254);//IP范围
System.out.println("");
ai2=ai2+a2_ziwangzengliang;
}
a_i1++;
}
}
else{
String a3_zhujiwei=String.valueOf(11111111-ab_m4); //String.valueOf(11111111-ab_m4)表示将二进制运算的结果装化成字符串
int a3_zhujiweishu=a3_zhujiwei.length();//主机位数
int a3_ziwangweishu=8-a3_zhujiwei.length()+16;//子网位数
double a3_ziwangshu=Math.pow(2,a3_ziwangweishu);//子网数,Math.pow(2,a3_ziwangweishu)表示幂次计算,即(2^(a3_ziwangweishu))
System.out.println("子网数为: "+a3_ziwangshu);
System.out.println("");
double a3_zhujishu=Math.pow(2, a3_zhujiweishu)-2;//每个子网的主机数,Math.pow(2,a3_ziwangweishu)表示幂次计算,即(2^(a3_ziwangweishu))
System.out.println("每个子网的主机数为: "+a3_zhujishu);
System.out.println("");
int a3_ziwangzengliang=256-m4;//子网增量
while(a_i2<256){
a_i3=0;
while(a_i3<256){
ai3=0;
while(ai3<=m4){
System.out.println("有效子网:"+st1+"."+a_i2+"."+a_i3+"."+ai3); //有效子网
System.out.println("广播地址:"+st1+"."+a_i2+"."+a_i3+"."+(ai3+a3_ziwangzengliang-1));//每个子网的广播地址
System.out.println("IP范围 :"+st1+"."+a_i2+"."+a_i3+"."+(ai3+1)+"~"+st1+"."+a_i2+"."+a_i3+"."+(ai3+a3_ziwangzengliang-2));//IP范围
System.out.println("");
ai3=ai3+a3_ziwangzengliang;
}
a_i3++;
}
a_i2++;
}
}
}
//B类
if(x1>=128&&x1<=191){
System.out.println("本IP地址为:B类 ");
System.out.println("");
int bb_m4=Integer.parseInt(Integer.toBinaryString(m4));//将m4从十进制转化成2进制并且转化成整形
int bb_m3=Integer.parseInt(Integer.toBinaryString(m3));//将m3从十进制转化成2进制并且转化成整形
if(m3!=255){
String b1_zhujiwei=String.valueOf(11111111-bb_m3);//String.valueOf(11111111-bb_m3)表示将二进制运算的结果装化成字符串
int b1_zhujiweishu=b1_zhujiwei.length()+8;//主机位数
int b1_ziwangweishu=8-b1_zhujiwei.length();//子网位数
double b1_ziwangshu=Math.pow(2,b1_ziwangweishu);//子网数,Math.pow(2,b1_ziwangweishu)表示幂次计算,即(2^(b1_ziwangweishu))
System.out.println("子网数为: "+b1_ziwangshu);
System.out.println("");
double b1_zhujishu=Math.pow(2, b1_zhujiweishu)-2;//每个子网的主机数,Math.pow(2,b1_ziwangweishu)表示幂次计算,即(2^(b1_ziwangweishu))
System.out.println("每个子网的主机数为: "+b1_zhujishu);
System.out.println("");
int b1_ziwangzengliang=256-m3;//子网增量
while(bi1<=m3){ //255.255.128.0类似
System.out.println("有效子网:"+st1+"."+st2+"."+bi1+"."+st4); //有效子网
System.out.println("广播地址:"+st1+"."+st2+"."+(bi1+b1_ziwangzengliang-1)+"."+255);//每个子网的广播地址
System.out.println("IP范围 :"+st1+"."+st2+"."+bi1+"."+1+"~"+st1+"."+st2+"."+(bi1+b1_ziwangzengliang-1)+"."+254);//IP范围
System.out.println("");
bi1=bi1+b1_ziwangzengliang;
}
}
else{//255.255.255.128类似
String b2_zhujiwei=String.valueOf(11111111-bb_m4);//String.valueOf(11111111-bb_m4)表示将二进制运算的结果装化成字符串
int b2_zhujiweishu=b2_zhujiwei.length();//主机位数
int b2_ziwangweishu=8-b2_zhujiweishu+8;//子网位数
double b2_ziwangshu=Math.pow(2,b2_ziwangweishu);//子网数,Math.pow(2,b2_ziwangweishu)表示幂次计算,即(2^(b2_ziwangweishu))
System.out.println("子网数为: "+b2_ziwangshu);
System.out.println("");
double b2_zhujishu=Math.pow(2, b2_zhujiweishu)-2;//每个子网的主机数,Math.pow(2,b2_ziwangweishu)表示幂次计算,即(2^(b2_ziwangweishu))
System.out.println("每个子网的主机数为: "+b2_zhujishu);
System.out.println("");
int b2_ziwangzengliang=256-m4;//子网增量
while(b_i<256){
bi2=0;
while(bi2<=m4){
System.out.println("有效子网:"+st1+"."+st2+"."+b_i+"."+bi2); //有效子网
System.out.println("广播地址:"+st1+"."+st2+"."+b_i+"."+(bi2+b2_ziwangzengliang-1));//每个子网的广播地址
System.out.println("IP范围 :"+st1+"."+st2+"."+b_i+"."+(bi2+1)+"~"+st1+"."+st2+"."+b_i+"."+(bi2+b2_ziwangzengliang-2));//IP范围
System.out.println("");
bi2=bi2+b2_ziwangzengliang;
}
b_i++;
}
}
}
//C类
if(x1>=192&&x1<=223){
System.out.println("本IP地址为:C类 ");
System.out.println("");
int cb_m4=Integer.parseInt(Integer.toBinaryString(m4));//将m4从十进制转化成2进制并且转化成整形
String c_zhujiwei=String.valueOf(11111111-cb_m4);//String.valueOf(11111111-cb_m4)表示将二进制运算的结果装化成字符串
int c_zhujiweishu=c_zhujiwei.length();//主机位数
int c_ziwangweishu=8-c_zhujiweishu;//子网位数
double c_ziwangshu=Math.pow(2,c_ziwangweishu);//子网数,Math.pow(2,c_ziwangweishu)表示幂次计算,即(2^(c_ziwangweishu))
System.out.println("子网数为: "+c_ziwangshu);
System.out.println("");
double c_zhujishu=Math.pow(2, c_zhujiweishu)-2;//每个子网的主机数,Math.pow(2,c_ziwangweishu)表示幂次计算,即(2^(c_ziwangweishu))
System.out.println("每个子网的主机数为: "+c_zhujishu);
System.out.println("");
int c_ziwangzengliang=256-m4;//子网增量
while(ci<=m4){
System.out.println("有效子网:"+st1+"."+st2+"."+st3+"."+ci); //有效子网
System.out.println("广播地址:"+st1+"."+st2+"."+st3+"."+(ci+c_ziwangzengliang-1));//每个子网的广播地址
System.out.println("IP范围 :"+st1+"."+st2+"."+st3+"."+(ci+1)+"~"+st1+"."+st2+"."+st3+"."+(ci+c_ziwangzengliang-2));//IP范围
System.out.println("");
ci=ci+c_ziwangzengliang;
}
}
}
}
计算机网络课程设计(子网自动划分)简单加注释
最新推荐文章于 2024-03-25 16:01:06 发布