Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > IP калькулятор


Автор: Rauko 13.7.2015, 13:23
в общем, захотела написать сама вот такую программу... задача - высчитывать по данному адресу и маске сеть, в который входит введенный адрес, начальный и конечный адреса этой сети, широковещательный адрес, класс сети и его классовую маску по умолчанию... ну это так, программа минимум.

начала писать программу, но как всегда  через...  с ошибками и кучей непонимания

пока имею следующий код
Код

import java.net.*;
import java.util.*;

public class IPcalc {
    public static void main (String[] args) {
        String currentHost = args[0];
        String currentMask = args[1];
        System.out.println("Your IP :  " + currentHost + "\nYour mask: " + currentMask);
        InetAddress addr = InetAddress.getByName(currentHost);
        byte[] bIP = addr.getAddress();
        InetAddress mask = InetAddress.getByName(currentMask);
        byte[] bMask = mask.getAddress();
        int [] net = new int[4];
        for(int i = 0; i <= 3; i++){
            int bufIP = bIP[i];
            int bufMask = bMask[i];
            int bufNet = bufIP ^ bufMask;
            net[i] = bufNet;
        }
        System.out.print("Net adress is: " + net[0] + "." + net[1] + "." + net[2] + "." + net[3]);
    }
}


перевод в двоичную систему пока вырезала, она на данный момент единственное, что точно работает как надо... хотя в изначальной задумке она и не требовалась.

из недовольств компилятора:
IPcalc.java:9: error: unreported exception UnknownHostException; must be caught or declared to be thrown
        InetAddress addr = InetAddress.getByName(currentHost);
                                                ^
IPcalc.java:11: error: unreported exception UnknownHostException; must be caught or declared to be thrown
        InetAddress mask = InetAddress.getByName(currentMask);
                                                ^
2 errors
1. что ему может тут не нравится? как лечить?
2. как проинвертировать маску для получения широковещательного адреса?
3. на сколько все написанное кривое? 

пока это все вопросы, которые есть, дальше будут уже по мере написания появляться

Автор: _zorn_ 14.7.2015, 06:48
Чтобы компилятор не ругался оберни в try/catch

Вместо ксора нужен AND
Код
int bufNet = bufIP & bufMask;


Я бы работал с интегерами, а не с байтами. Например так.
Код

import java.net.*;
import java.util.*;
public class IPcalc {

    private static int ipToInt(String ip)
    {
        int result = 0;
        try{
            byte[] addr = InetAddress.getByName(ip).getAddress();
            for (byte b: addr){
                result = result << 8 | (b & 0xFF);
            }
        }catch(Exception e){}
        return result;
    }
    private static String intToIp(int ip)
    {
        return (ip>>24 & 0xFF) + "." + (ip>>16 & 0xFF) + "." + (ip>>8 & 0xFF) + "." + (ip & 0xFF);
    }

    public static void main (String[] args) {
        String currentHost = args[0];
        String currentMask = args[1];
        System.out.println("Your IP :  " + currentHost + "\nYour mask: " + currentMask);
        int addr = ipToInt(currentHost);
        int mask = ipToInt(currentMask);
        int net = addr & mask;
        int broadcast = net | ~mask;
        System.out.println("Net address is: " + intToIp(net));
        System.out.println("Broadcast address is: " + intToIp(broadcast));
        System.out.println("First address is: " + intToIp(net + 1));
        System.out.println("Last address is: " + intToIp(broadcast - 1));
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)