anpingen, liste aller IPs im netzwerk erhalten

Status
Nicht offen für weitere Antworten.
M

marek

Gast
hallo!

ich mochte in ein client programm eine funktion einbauen, die nach servern sucht.
es soll erstmal eine liste aller computer im netzwerk erstellt werden.

ich haber versucht alle IPs durchzugehen, die mit meiner IP anfangen, also:
192.168.1.1,
192.168.1.2,
192.168.1.3,
192.168.1.4,
usw...
jedesmal will ich prüfen, ob es diese IP im netzwerk gibt.
dazu hab ich versucht einfach immer
Code:
server=new Socket(ip,port);
zu machen und zu warten, ob der antwortet.

das dauert aber viel zu lange. (am anfang 1 sek pro IP, dann immer langsamer bis gar nix mehr passiert)
und kommt nie zu einem ende.

weiss einer, wie ich das schneller machen kann.
oder wie ich anders eine liste aller IPs im netzwerk bekommen kann?

mfg, marek
 
B

Beni

Gast
Schliesst du die sockets auch wieder ("server.close();")?

Mit Multithreading könntest du mehrere gleichzeitig abfragen, vielleicht so 10-20 parallelle Tests.
 

Nick H.

Bekanntes Mitglied
wie wärs wenn du einfach an die Broadcast Adresse pingst?
dann antworten gleich alle die erreichbar sind

weiß allerdings auch nich mehr genau wie das geht
ich glaub du musst das ganze einfach in deinem Fall an
192.168.1.255 schicken
 
M

marek

Gast
hab jetzt mit multithreating gemacht.
funktioniert auch gut.
wenn ein server da ist klappt meine komische art von anpingen - sogar, wenn dieser gar nicht .accept(); macht. find ich seltsam...
auf jeden fall hab ich jetzt noch das problem - wie beni agedeutet hat - , dass ich client und server dann wieder trennen muss, bzw nur den client vom server. wie mach ich das am besten, so dass ich den client nachher wiederverwenden kann?

hier mal bischen code von client:
Code:
public class OlliClient1{
	
    Socket server;
    InputStream in;
    OutputStream out;

    public OlliClient1(){
		super();
    }
    
    public boolean verbindeMitServer(String ip,int port){
    	boolean ret=false;
		try{
			server=new Socket(ip,port);
			in=server.getInputStream();
			out=server.getOutputStream();
			ret=true;
		}catch(IOException e){}
		return ret;
    }
    
    public void trenneVonServer(){
    	try{
    		server.close();
    		in.close();
    		out.close();
    		server=null;
		}catch(IOException e){}
    }
    
    public void send(byte[] nachricht){
    	try{
    		out.write(nachricht);
    	}catch(java.lang.Throwable exc){}
    }
    
    public void receive(byte[] nachricht,int waitmillis){
    	try{
    		server.setSoTimeout(waitmillis);
    		in.read(nachricht);
    	}catch(java.lang.Throwable exc){}
	}
    
    public Vector getServerList(int port,int waitmillis){
    	Vector ret=new Vector();
		String myIP=Static.getOwnIP();
		char[] myIPchar=myIP.toCharArray();
		String[] myIPstring=new String[4];
		int at=0;
		for(int mal=0;mal<4;mal++){
			int l=0;
			while(at<myIP.length() && (int)myIP.charAt(at)!=46){
				at++;
				l++;
			}
			char[] tempchar=new char[l];
			for(int i=0;i<l;i++){
				tempchar[i]=myIPchar[at-l+i];
			}
			myIPstring[mal]=new String(tempchar);
			at++;
		}
    	String tempIP;
		for(int i=0;i<255;i++){
			tempIP=myIPstring[0]+"."+myIPstring[1]+"."+myIPstring[2]+"."+i;
			new Anpinger(this,tempIP,port,ret).start();
		}
		try{
			Thread.sleep(waitmillis);
		}catch(InterruptedException e){}
    	return ret;
    }

    public class Anpinger extends Thread{
		
		String ip;
		int port;
		OlliClient1 oc;
		Vector ipsinlan;
		
		public Anpinger(OlliClient1 oc,String ip,int port,Vector ipsinlan){
			super();
			this.oc=oc;
			this.ip=ip;
			this.port=port;
			this.ipsinlan=ipsinlan;
		}
		
		public void run(){
			if(oc.verbindeMitServer(ip,port)){
				ipsinlan.add(ip);
				trenneVonServer();
			}
		}
	}
}
 
M

marek

Gast
PS: trenneVonServer klappt irgendwie nicht.
danach versuche ich noch mal eine verbindung aufzustellen, funktioneirt nicht.
wenn ich nicht vorher anpinge funktioniert die verbindung aber
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben