Avatar billede adflicto Nybegynder
10. marts 2008 - 17:21 Der er 3 kommentarer

SocketTimeoutException hvorfor kun nogle gange?

Hej.

Jeg har skrevet en applikation der skanner et interval af ip adresser på et netværk, samt et interval af porte på ip adresserne. Det er meningen, at applikation skal finde ud af, om der er forbindelse eller ej.

Jeg har gjort således, at der oprettes en ny tråd for hver ip adresse i intervallet. I hver tråd oprettes der en ny socket og der forbindes til den givne ipadresse og port. Her sætter jeg timeoutet til 500 ms.

Herunder ses trådens run():

public void run()
  {
    Socket s = new Socket();
    try{
    String ip = NSs.get(loops).getIp();
    InetAddress theIP = InetAddress.getByName(ip);
    int port = NSs.get(loops).getPort();
           
    s.connect(new InetSocketAddress(theIP,port),timeout);
    if(s.isConnected()){
          NSs.get(loops).setOnline(true);
    }
    else{
          NSs.get(loops).setOnline(false);
    }
    }
    catch(ConnectException CE){} //refused connection
    catch(SocketTimeoutException STE){}
    catch(Exception E){
          System.out.println(E);
    }
    finally{
    try{
          s.close();
          loops++;     
          if(loops<NSs.size())
              run();
    }
    catch(IOException IOE){
    }
    }
}

Jeg tester applikationen ved at søge i intervallet
192.168.1.1 -> 192.168.1.5
og port range:
79 -> 80

dvs. for hver ip i intervallet, bliver en ny tråd startet (med ovenstående run()). Dette går fint, den finder at 192.168.1.1:80 er online, men hvis jeg gør intervallet 1 ip større dvs.:
192.168.1.1 -> 192.168.1.6 og port intervallet det samme, siger den at 192.168.1.1:80 ikke er online.

Dette for mig til at tro, at der er tale om en timing fejl eller lign. med mindre der er et eller andet jeg har misforstået.

Hjælp søges!

På forhånd tak.
Avatar billede arne_v Ekspert
16. marts 2008 - 23:40 #1
Jeg synes at rekursivt kald i en finally er en grim måde at gøre det på.

Prøv og udskriv de exceptions, så du kan se hvilken fejl du får.
Avatar billede arne_v Ekspert
05. maj 2008 - 06:12 #2
??
Avatar billede adflicto Nybegynder
05. maj 2008 - 11:03 #3
Har stadig ikke fundet ud af den optimale løsning på det her problem. Den aktuelle løsning er at hvis en ip ikke er online forsøges der at forbindes igen en enkelt gang. Men projektet er afsluttet så er parat til at lukke emnet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester