# netzwerk durchsuchen



## kernel_panic (23. Okt 2006)

Ich brauche eine einfache, kurze und schnell methode mit der ich im Netzwerk befindliche
Computer ausfindig machen kann(am besten Platformunabhängig, wenn das nicht geht dann in Windows)
Und auf gar keinen Fall soll ein Prozess ausgelesen werden(net view, ipconfig /all, etc). :bae: 

Danke für die Hilfe


----------



## dieta (23. Okt 2006)

Alle möglichen IPs von 192.168.x.1 bis 192.168.x.255 anpingen und schauen, ob eine Antwort kommt...
An sonsten kannst du mal schauen, ob die Klasse "INetAddress" was fertiges bereitstellt, und wenn nicht hilf immernoch Google.


----------



## kernel_panic (23. Okt 2006)

Ja hab ich mir auch schon beinahe gedacht!
Nur weiss ich nicht wie!
Wie soll ich die ips incrementieren?
Also ich hab eine Implementiereung von einem Client Socket(denn mein programm ist ein Chat programm)
und einem ServerSocket Thread da wär ja schon mal potential vorhanden!
Wenn ich aber folgendes mache:

```
String[] ips = new String[255];
int cur_ip_pos=0;
for(int i = 0; i < 255; ++i)
{
     Socket test = new Socket(InetAddress.getByAddress(new String("192.168.20."+i).getBytes()), port)
     if(test.isConnected()){
          ips[cur_ip_pos] = test.getInetAddress() .getHostName();
          ++cur_ip_pos;
     }
}
```
löst der meine ip nicht auf(die mit der ich den Socket parametriere)


----------



## kernel_panic (24. Okt 2006)

gibts nicht ne möglichkeit ein broadcast nachricht zu senden?
also an alle pcs im netz? das liese sich nämlich sehr gut verwerten.
Es ist egal ob das mit datagramsocket oder ServerSocket/Socket passiert!


----------



## puddah (27. Okt 2006)

[cite]Socket test = new Socket(InetAddress.getByAddress(new String("192.168.20."+i).getBytes()), port) [/cite]

Das geht so nicht, wenn du von String die getBytes Methode aufrufst,  bekommst du nicht die Bytes der IP Adresse, sondern die der Character im String. Du mußt dir das Array vorher zusammen bauen.


----------



## kernel_panic (27. Okt 2006)

hab ich jetzt auch herausgefunden, aber wenn ich meine schleife durchlaufen lasse, dann
wird das komplette netzwerk blockiert(um die5 min).  deshalb hab ich ja gefragt, ob man nicht eine broadcast message auf ALLE rechner im Netz schicken kann, die mein Chat-Programm beantwortet. Dann wäre mein Problem behoben.
In c++ gibts ein Makro(bei QT) das heisst broadcast. Gibts sowas nicht auch in Java?


----------



## puddah (30. Okt 2006)

Guck dir mal die Klassen DatagrammPacket und DatagrammSocket im package java.net an, damit kann man UDP Broadcast senden und  empfangen.


----------



## foobar (30. Okt 2006)

> In c++ gibts ein Makro(bei QT) das heisst broadcast. Gibts sowas nicht auch in Java?


Das hat nichts mit einer bestimmten Sprache zu tun.

http://de.wikipedia.org/wiki/Broadcast


----------



## kernel_panic (31. Okt 2006)

@foobar:
kann ich eine broadcast nachricht auch mit dem normalen Socket verschicken(an ip: 255.255.255.255)? Also ohne DatagramSocket zu verwenden?


----------



## thE_29 (31. Okt 2006)

Broadcast geht nicht mit Java unter Windows...

Das ist von Sun so "implementiert" oder eben nicht implementiert.. (aber es ist kein Bug, laut sun ...)

Unter Linux gehts... 

Außerdem wäre es auch egal, selbst wenn es ein Bug wäre.. Suns Bug Behebung ist genausoda wie die Erde 3 Monde hat.. 
http://bugs.sun.com/bugdatabase/top25_bugs.do (man schaue sich nur mal die Zeitpunkte an, wann die Bugs gemeldet worden sind..)

Btw.: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4084527


----------



## foobar (31. Okt 2006)

> kann ich eine broadcast nachricht auch mit dem normalen Socket verschicken(an ip: 255.255.255.255)? Also ohne DatagramSocket zu verwenden?


Theoretisch ja, praktisch Nein siehe the_29s Beitrag.


----------

