Odd InetAddress.isReachable () problem

Moja praca polega na opracowywaniu oprogramowania do kamer sieciowych do zastosowań w handlu detalicznym. Jednym z elementów oprogramowania tworzonego przez mój zespół jest serwer WWW, który pobiera różne raporty generowane w HTML przez samą kamerę (która ma własny wbudowany serwer internetowy) i jest przechowywany w kamerze. Nasze oprogramowanie pobierze te raporty z kamery i przechowa je na centralnym serwerze WWW.

Chociaż dobrze podłączamy adresy IP kamer do naszego oprogramowania, opracowuję prostą klasę Java, która będzie sprawdzać sieć i lokalizować wszystkie kamery w sieci.

Problem polega jednak na tym, że chociaż działa dobrze na moim komputerze i komputerze mojego współpracownika, gdy próbujemy uruchomić go na rzeczywistym komputerze PC, który będzie hostował nasze oprogramowanie ... działa, ale mówi, że każdy adres IP w podsieci jest offline / nieosiągalny Z WYJĄTKIEM IP bramy.

Na przykład, jeśli uruchomię go z mojego komputera lub współpracującego z nim komputera po podłączeniu do zamkniętej sieci LAN, otrzymam następujące aktywne adresy IP i flagę informującą mnie, czy jest to kamera, czy nie. (brama to 192.168.0.1, maska ​​podsieci to 255.255.255.0, co oznacza pełny zakres 256 urządzeń do wyszukania)

IP:/192.168.0.1  Active:true Camera:false
IP:/192.168.0.100  Active:true Camera:true    <- this is camera 1
IP:/192.168.0.101  Active:true Camera:true    <- this is camera 2
IP:/192.168.0.103  Active:true Camera:false   <- my PC
IP:/192.168.0.104  Active:true Camera:false   <- this is our webserver

Ale z jakiegoś powodu, uruchamiając ten sam program z komputera z serwerem WWW, używając tego samego środowiska JRE, otrzymuję tylko następujące informacje

IP:/192.168.0.1  Active:true Camera:false

Teraz mój kod, zamiast wyliczać po kolei każdy adres IP w głównym wątku, tworzy oddzielny wątek dla każdego sprawdzanego adresu IP i uruchamia je jednocześnie (w przeciwnym razie wyliczenie całego zakresu adresów IP zajęłoby niewiele ponad 21 minut) limit czasu 5000ms / IP). Główny wątek ponownie uruchamia te wątki skanowania IP co 15 sekund.

Sprawdziłem, czy wszystkie wątki są uruchomione na wszystkich komputerach, nie są wyrzucane wyjątki. Nawet zweryfikowałem, że żaden z wątków nie utknął. Każdy wątek trwa od 5001 do 5050 ms od początku do końca, a te wątki, które mają aktywny adres IP, kończą się szybciej (> 5000 ms), więc wiem, że poprawnie czeka na pełne 5000 ms w metodzie ipAddr.isReachable (5000).

Ja i mój współpracownik jesteśmy w tym momencie zdezorientowani, podczas gdy wydaje się, że osiąga te aktywne IP dobrze, gdy działa na naszych komputerach, ale nie otrzymuje odpowiedzi od komputera z serwerem WWW?

Wykluczyliśmy problemy z zaporą sieciową, problemy z dostępem administracyjnym itp. Jedyną różnicą jest to, że nasz serwer internetowy to Embedded Win XP, a nasze komputery PC to Windows 7.

To nas zakłopotało. Jakieś pomysły dlaczego?

Poniżej znajduje się kod uruchamiający każdy wątek IP:

public void CheckIP() {
new Thread() {
    @Override
    public void run() {
        try {
            isActive = ipAddr.isReachable(5000);
            if (isActive) {
                if (!isCamera) {
                    isCamera = new IpHttpManager().GetResponse(ipAddr.toString());
                }
            } else {
                isCamera = false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}.start();

}

EDYTOWAĆ: Oto kod, który buduje każdy adres IP w celu sprawdzenia po określeniu zakresu na podstawie bramy i podsieci ...

for(int i=subMin; i<=subMax; i++) {
byte[] ip = new byte[] {(byte)oct[0],(byte)oct[1],(byte)oct[2],(byte)i};
try {
    scanners[subCount] = new IpScan(InetAddress.getByAddress(ip));
    subCount++;
} catch (UnknownHostException e) {
    e.printStackTrace();
}}

questionAnswers(2)

yourAnswerToTheQuestion