Java 代码实现子网划分,并输出网络地址和广播地址
import java.io.*;
public class ffdg {
/**
* @param args
*/
public static void main(String[] args)throws IOException {
// TODO Auto-generated method stub
String ip; //用于接收要划分的IP
int s; //用于接收以要划分的子网数
int n; //输入子网数对应的二进制位数
System.out.println('---------------划分子网---------------');
//输入要划分的IP地址:ip
System.out.println('请输入要划分的IP地址(格式为:x1.x2.x3.x4):');
System.out.print('→:');
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
ip = br.readLine();
//截取x1
int index1 = ip.indexOf('.');
String st1 = ip.substring(0,index1);
int x1=Integer.parseInt(st1);//把String类型的st转化成int型
//截取x2
int index2= ip.indexOf('.',index1+1);
String st2 = ip.substring(index1+1,index2);
int x2=Integer.parseInt(st2);//把String类型的st转化成int型
//截取x3
int index3= ip.indexOf('.',index2+1);
String st3 = ip.substring(index2+1,index3);
int x3=Integer.parseInt(st3);//把String类型的st转化成int型
//截取x4
//A类
if(x1>0&&x1<=126){
System.out.println('本IP地址能划分划分的最大子网数为: '+((int)Math.pow(2,24-2)-2));
}
//B类
if(x1>=128&&x1<=191){
System.out.println('本IP地址能划分划分的最大子网数为: '+((int)Math.pow(2,16-2)-2));
}
//C类
if(x1>=192&&x1<=223){
System.out.println('本IP地址能划分划分的最大子网数为: '+((int)Math.pow(2,8-2)-2));
}
//输入要划分的子网数数:s
System.out.println('请输入要划分的子网数:');
System.out.print('→:');
String subnet_num= br.readLine();
s = Integer.parseInt(subnet_num);
br.close();
//求所输入子网数对应的二进制位数:n
for( n=1 ;(Math.pow(2,n)-2)<s;n++);
System.out.println('--------------------------------------');
//求子网掩码
int sum = 0;
for(int i=0;i<n;i++){
sum = sum +(int)Math.pow(2,(7-i));
}
System.out.println('子网掩码为:');
//A类
if(x1>0&&x1<=126){
if(n<=8){
System.out.println('255.'+sum+'.0.0');
}else if(n>8&&n<=16){
n = n-8;
sum = 0;
for(int i=0;i<n;i++){
sum = sum +(int)Math.pow(2,(7-i));
}
System.out.println('255.255.'+sum+'.0');
}else{
n = n-16;
sum = 0;
for(int i=0;i<n;i++){
sum = sum +(int)Math.pow(2,(7-i));
}
System.out.println('255.255.255.'+sum);
}
}
//B类
if(x1>=128&&x1<=191){
if(n<=8){
System.out.println('255.255.'+sum+'.0');
}else{
n = n-8;
sum = 0;
for(int i=0;i<n;i++){
sum = sum +(int)Math.pow(2,(7-i));
}
System.out.println('255.255.255.'+sum);
}
}
//C类
if(x1>=192&&x1<=223){
System.out.println('255.255.255.'+sum);
}
//求每网段主机数
System.out.println('每网段主机数:');
//A类
if(x1>0&&x1<=126){
System.out.println(Math.pow(2,(32-n))-2);
}
//B类
if(x1>=128&&x1<=191){
System.out.println(Math.pow(2,(16-n))-2);
}
//C类
if(x1>=192&&x1<=223){
System.out.println(Math.pow(2,(8-n))-2);
}
//输出各子网IP范围
System.out.println('各子网IP范围如下:');
//A类
if(x1>0&&x1<=126){
if(n<=8){
for (int i=1,sub_id=0; i<Math.pow(2,n)-1;i++ ){
sub_id= (int)Math.pow(2,(8-n))*i;
System.out.print('<'+i+'>'+' ');
System.out.println(x1+'.'+sub_id+'.0.'+1+
'---'+x1+'.'+(int)(sub_id+Math.pow(2,(8-n))-1)+'.255.255'+' 网络地址:'+x1+'.'+sub_id+'.0.0'+' 广播地址:'+x1+'.'+(int)(sub_id+Math.pow(2,(8-n))-1)+'.255.255');
}
}
if(n>8&&n<=16){
int subnet_id =0;//定义子网号
for (int i=0; i<Math.pow(2,8);i++ ){
if(i==0){
for (int k=1,sub_id=0;k<=Math.pow(2,n-8)-1;k++){
sub_id = (int)Math.pow(2,(16-n))*k;
System.out.print('<'+(++subnet_id)+'>'+' ');
System.out.println(x1+'.'+i+'.'+sub_id+'.'+1+'------'+x1+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n)))+'.254'+' 网络地址:'+x1+'.'+i+'.'+sub_id+'.0'+' 广播地址:'+x1+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n))-1)+'.255');
}
}else{
for (int k=0,sub_id=0;k<=Math.pow(2,n-8)-1;k++){
if((i==255)&&k==(Math.pow(2,n-8)-1)){break;}
sub_id = (int)Math.pow(2,(16-n))*k;
System.out.print('<'+(++subnet_id)+'>'+' ');
System.out.println(x1+'.'+i+'.'+(sub_id)+'.'+1+'------'+x1+i+'.'+(sub_id+(int)Math.pow(2,(16-n)))+'.254'+' 网络地址:'+x1+'.'+i+'.'+sub_id+'.0'+' 广播地址:'+x1+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n))-1)+'.255');
}
}
}
}
if(n>16&&n<24){
int subnet_id =0;//定义子网号
for(int m=0;m<Math.pow(2,8);m++){
if(m==0){
for (int i=0; i<Math.pow(2,8);i++ ){
if(i==0){
for (int k=1,sub_id=0;k<=Math.pow(2,n-16)-1;k++){
sub_id = (int)Math.pow(2,(24-n))*k;
System.out.print('<'+(++subnet_id)+'>'+' ');
System.out.println(x1+'.'+m+'.'+i+'.'+(sub_id+1)+'------'+x1+'.'+m+'.'+i+'.'+(sub_id+(int)Math.pow(2,(24-n))-2)+' 网络地址:'+x1+'.'+m+'.'+i+'.'+sub_id+' 广播地址:'+x1+'.'+m+'.'+i+'.'+(sub_id+(int)Math.pow(2,(24-n))-1));
}
}else{
for (int k=0,sub_id=0;k<=Math.pow(2,n-16)-1;k++){
sub_id = (int)Math.pow(2,(24-n))*k;
System.out.print('<'+(++subnet_id)+'>'+' ');
System.out.println(x1+'.'+m+'.'+i+'.'+(sub_id+1)+'------'+x1+'.'+m+'.'+i+'.'+(sub_id+(int)Math.pow(2,(24-n))-2)+' 网络地址:'+x1+'.'+m+'.'+i+'.'+sub_id+' 广播地址:'+x1+'.'+m+'.'+i+'.'+(sub_id+(int)Math.pow(2,(24-n))-1));
}
}
}
}else{
for (int i=0; i<Math.pow(2,8);i++ ){
for (int k=0,sub_id=0;k<=Math.pow(2,n-16)-1;k++){
if(m==255&&(i==255)&&k==(Math.pow(2,n-16)-1)){break;}
sub_id = (int)Math.pow(2,(24-n))*k;
System.out.print('<'+(++subnet_id)+'>'+' ');
System.out.println(x1+'.'+m+'.'+i+'.'+(sub_id+1)+'------'+x1+'.'+m+'.'+i+'.'+(sub_id+(int)Math.pow(2,(24-n))-2)+' 网络地址:'+x1+'.'+m+'.'+i+'.'+sub_id+' 广播地址:'+x1+'.'+m+'.'+i+'.'+(sub_id+(int)Math.pow(2,(24-n))-1));
}
}
}
}
}
}
//B类
if(x1>=128&&x1<=191){
if(n<=8){
for (int i=1,sub_id=0; i<Math.pow(2,n)-1;i++ ){
sub_id= (int)Math.pow(2,(8-n))*i;
System.out.print('<'+i+'>'+' ');
System.out.println(x1+'.'+x2+'.'+sub_id+'.'+1+'---'+x1+'.'+x2+'.'+(int)(sub_id+Math.pow(2,(8-n))-1)+'.254'+' 网络地址:'+x1+'.'+x2+'.'+sub_id+'.0'+' 广播地址:'+x1+'.'+x2+'.'+(int)(sub_id+Math.pow(2,(8-n))-1)+'.255');
}
}
if(n>8&&n<16){
int subnet_id =0;//定义子网号
for (int i=0; i<Math.pow(2,8);i++ ){
if(i==0){
for (int k=1,sub_id=0;k<=Math.pow(2,n-8)-1;k++){
sub_id = (int)Math.pow(2,(16-n))*k;
System.out.print('<'+(++subnet_id)+'>'+' ');
System.out.println(x1+'.'+x2+'.'+i+'.'+(sub_id+1)+'------'+x1+'.'+x2+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n))-2)+' 网络地址:'+x1+'.'+x2+'.'+i+'.'+sub_id+' 广播地址:'+x1+'.'+x2+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n))-1));
}
}else{
for (int k=0,sub_id=0;k<=Math.pow(2,n-8)-1;k++){
if((i==255)&&k==(Math.pow(2,n-8)-1)){break;}
sub_id = (int)Math.pow(2,(16-n))*k;
System.out.print('<'+(++subnet_id)+'>'+' ');
System.out.println(x1+'.'+x2+'.'+i+'.'+(sub_id+1)+'------'+x1+'.'+x2+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n))-2)+' 网络地址:'+x1+'.'+x2+'.'+i+'.'+sub_id+' 广播地址:'+x1+'.'+x2+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n))-1));
}
}
}
}
}
//C类
if(x1>=192&&x1<=223){
for (int i=1,sub_id=0; i<Math.pow(2,n)-1;i++ ){
sub_id= (int)Math.pow(2,(8-n))*i;
System.out.print('<'+i+'>'+' ');
System.out.println(x1+'.'+x2+'.'+x3+'.'+(sub_id+1)+'---'+x1+'.'+x2+'.'+x3+'.'+((int)sub_id+Math.pow(2,(8-n))-2)+' 网络地址:'+x1+'.'+x2+'.'+x3+'.'+sub_id+' 广播地址:'+x1+'.'+x2+'.'+x3+'.'+((int)sub_id+Math.pow(2,(8-n))-1));
}
}
System.out.println('子网划分完毕');
}
}
原文地址: https://www.cveoy.top/t/topic/ojKv 著作权归作者所有。请勿转载和采集!