子网计算器:Java代码实现IP地址子网划分功能
import java.awt.; import java.awt.event.; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import javax.swing.*;
public class SubnetCalculator extends JFrame implements ActionListener { private static final long serialVersionUID = 1L;
private static JLabel ipLabel, subnetLabel, resultLabel, netmaskLabel, hostnumLabel, rangeLabel;
private static JTextField ipField, subnetField;
private static JButton calculateButton;
public static void main(String[] args) {
new SubnetCalculator().setVisible(true);
}
public SubnetCalculator() {
setTitle('子网计算器');
setSize(500, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
Container container = getContentPane();
container.setLayout(new GridLayout(6, 2, 10, 10));
ipLabel = new JLabel('IP地址(格式为:x1.x2.x3.x4):');
ipField = new JTextField(20);
subnetLabel = new JLabel('子网数:');
subnetField = new JTextField(20);
resultLabel = new JLabel('');
netmaskLabel = new JLabel('');
hostnumLabel = new JLabel('');
rangeLabel = new JLabel('');
calculateButton = new JButton('计算');
calculateButton.addActionListener(this);
container.add(ipLabel);
container.add(ipField);
container.add(subnetLabel);
container.add(subnetField);
container.add(calculateButton);
container.add(resultLabel);
container.add(netmaskLabel);
container.add(hostnumLabel);
container.add(rangeLabel);
setLocationRelativeTo(null);
}
@Override
public void actionPerformed(ActionEvent e) {
String ip = ipField.getText();
String subnet_num = subnetField.getText();
try {
int s = Integer.parseInt(subnet_num);
int n = 0;
int index1 = ip.indexOf('.');
int x1 = Integer.parseInt(ip.substring(0, index1));
int index2 = ip.indexOf('.', index1 + 1);
int x2 = Integer.parseInt(ip.substring(index1 + 1, index2));
int index3 = ip.indexOf('.', index2 + 1);
int x3 = Integer.parseInt(ip.substring(index2 + 1, index3));
if (x1 > 0 && x1 <= 126) {
resultLabel.setText('本IP地址能划分划分的最大子网数为: ' + ((int) Math.pow(2, 24 - 2) - 2));
if (s <= 128) {
for (n = 1; (Math.pow(2, n) - 2) < s; n++) ;
int sum = 0;
for (int i = 0; i < n; i++) {
sum = sum + (int) Math.pow(2, (7 - i));
}
netmaskLabel.setText('子网掩码为:' + '255.' + sum + '.0.0');
hostnumLabel.setText('每网段主机数:' + Math.pow(2, (32 - n)) + '台');
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;
rangeLabel.setText('各子网IP范围如下:
' + '<' + i + '>' + ' ' + x1 + '.' + sub_id + '.0.1' + '---' + x1 + '.' + (int) (sub_id + Math.pow(2, (8 - n)) - 2) + '.255.254'); } } else 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; subnet_id++; rangeLabel.setText(rangeLabel.getText() + ' <' + subnet_id + '>' + ' ' + x1 + '.' + i + '.' + sub_id + '.1' + '------' + x1 + '.' + i + '.' + (sub_id + (int) Math.pow(2, (16 - n))) + '.254'); } } 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; subnet_id++; rangeLabel.setText(rangeLabel.getText() + ' <' + subnet_id + '>' + ' ' + x1 + '.' + i + '.' + sub_id + '.1' + '------' + x1 + '.' + i + '.' + (sub_id + (int) Math.pow(2, (16 - n))) + '.254'); } } } } else 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; subnet_id++; rangeLabel.setText(rangeLabel.getText() + ' <' + subnet_id + '>' + ' ' + x1 + '.' + m + '.' + i + '.' + (sub_id + 1) + '------' + x1 + '.' + m + '.' + i + '.' + (sub_id + (int) Math.pow(2, (24 - n))) + '.254'); } } 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; subnet_id++; rangeLabel.setText(rangeLabel.getText() + ' <' + subnet_id + '>' + ' ' + x1 + '.' + m + '.' + i + '.' + (sub_id + 1) + '------' + x1 + '.' + m + '.' + i + '.' + (sub_id + (int) Math.pow(2, (24 - n))) + '.254'); } } } } 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; subnet_id++; rangeLabel.setText(rangeLabel.getText() + ' <' + subnet_id + '>' + ' ' + x1 + '.' + m + '.' + i + '.' + (sub_id + 1) + '------' + x1 + '.' + m + '.' + i + '.' + (sub_id + (int) Math.pow(2, (24 - n))) + '.254'); } } } } } } else { resultLabel.setText('输入的子网数超出范围。'); } } else if (x1 >= 128 && x1 <= 191) { resultLabel.setText('本IP地址能划分划分的最大子网数为: ' + ((int) Math.pow(2, 16 - 2) - 2)); if (s <= 256) { for (n = 1; (Math.pow(2, n) - 2) < s; n++) ; int sum = 0; for (int i = 0; i < n; i++) { sum = sum + (int) Math.pow(2, (7 - i)); } netmaskLabel.setText('子网掩码为:' + '255.255.' + sum + '.0'); hostnumLabel.setText('每网段主机数:' + Math.pow(2, (16 - n)) + '台'); 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; rangeLabel.setText('各子网IP范围如下: ' + '<' + i + '>' + ' ' + x1 + '.' + x2 + '.' + sub_id + '.1' + '---' + x1 + '.' + x2 + '.' + (int) (sub_id + Math.pow(2, (8 - n)) - 2) + '.255.254'); } } else 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; subnet_id++; rangeLabel.setText(rangeLabel.getText() + ' <' + subnet_id + '>' + ' ' + x1 + '.' + x2 + '.' + i + '.' + (sub_id + 1) + '------' + x1 + '.' + x2 + '.' + i + '.' + (sub_id + (int) Math.pow(2, (16 - n))) + '.254'); } } 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; subnet_id++; rangeLabel.setText(rangeLabel.getText() + ' <' + subnet_id + '>' + ' ' + x1 + '.' + x2 + '.' + i + '.' + (sub_id + 1) + '------' + x1 + '.' + x2 + '.' + i + '.' + (sub_id + (int) Math.pow(2, (16 - n))) + '.254'); } } } } } else { resultLabel.setText('输入的子网数超出范围。'); } } else if (x1 >= 192 && x1 <= 223) { resultLabel.setText('本IP地址能划分划分的最大子网数为: ' + ((int) Math.pow(2, 8 - 2) - 2)); if (s <= 256) { for (n = 1; (Math.pow(2, n) - 2) < s; n++) ; int sum = 0; for (int i = 0; i < n; i++) { sum = sum + (int) Math.pow(2, (7 - i)); } netmaskLabel.setText('子网掩码为:' + '255.255.255.' + sum); hostnumLabel.setText('每网段主机数:' + Math.pow(2, (8 - n)) + '台'); for (int i = 1, sub_id = 0; i < Math.pow(2, n) - 1; i++) { sub_id = (int) Math.pow(2, (8 - n)) * i; rangeLabel.setText('各子网IP范围如下: ' + '<' + i + '>' + ' ' + x1 + '.' + x2 + '.' + x3 + '.' + (sub_id + 1) + '---' + x1 + '.' + x2 + '.' + x3 + '.' + ((int) sub_id + Math.pow(2, (8 - n)) - 2)); } } else { resultLabel.setText('输入的子网数超出范围。'); } } } catch (NumberFormatException ex) { resultLabel.setText('请检查输入的IP地址和子网数格式。'); } } }
原文地址: https://www.cveoy.top/t/topic/ocv3 著作权归作者所有。请勿转载和采集!