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.