计算机网络课程设计(IP子网划分)

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; 
   } 
  } 
 } 
} 

 

posted @ 2023-09-26 14:27  果汁大杯  阅读(40)  评论(0编辑  收藏  举报