Netzwerkname herausfinden

Status
Nicht offen für weitere Antworten.

TheJavaKid

Top Contributor
Hi hab mal ne Frage zu Netzwerken (werde ich vermutlich öfter haben denn mit Netzwerken hatte ich nie so viel zu tun)

gibt es ne möglichkeit nur den Netzwerknamen von allen die mit dem lan verbunden sind rauszufinden

zB. Im netzwerk gibt es drei computer die mit einander verbunden sind:
//PETER
//NIKI
//MUSTER

und diese andressen möchte ich in ein array schreiben:

also
Code:
String[] netzwerkNamen = {"//PETER", "//NIKI", "//MUSTER"};

so auf die schnelle fällt mir nur das ein:

Code:
public class Adressen {

   public static void main( String[] args) {
      try {
         InetAddress adresse = InetAddress.getLocalHost();
          System.out.println(adresse);
      } catch ( Exception e) {
         e.printStackTrace();
      }
   }
}

Ausgegeben wird dann (bei mir jetzt): Mathias/192.168.2.2

aber ich weiß nicht ob der den netzwerknamen ausgibt oder den computernamen.. hm

ich kenne mich mit netzwerken eben nicht so aus... kann mir da wer helfen?
 

Stiewen

Aktives Mitglied
Hallo maetty,

ich hatte vor Kurzem dasselbe Prob.

Meine Lösung ist aber ein wenig ausschweifend an dieser Stelle, also werde ich sie nur "struktgrammmäßig" erklären:

- Nach Programmstart: Nachricht an alle im Netzwerk senden
- Alle die das Programm zum empfangen anhaben empfangen die Nachricht und bauen eine Verbindung zum Sender auf
- Daten, wie Namen oder andere Infos hin und her senden
- Verbindung schließen und freuen ^^

Leider ist dies nur mit den Computern möglich, die auch das spezielle Java Programm dazu anhaben ...

Hier ein wenig Source dazu:

Sender (der der "Online" kommt):
Code:
try {
      MulticastSocket msSocket = new MulticastSocket(database.intPort2);
      msSocket.joinGroup(database.iaGroup);
      String strOnl;
      strOnl = "Ich bin Online gekommen, meine IP: 192.168.1.2, mein Name: Stiewen"; // Beispiel
      DatagramPacket dpMess = new DatagramPacket(strOnl.getBytes(), strOnl.length(), database.iaGroup, database.intPort2);
      msSocket.send(dpMess);
      msSocket.close();
    
} catch ( IOException ioe ) {

}
Empfänger (wichtige Stellen: Zeile 3 - 10)[databbase ist eine Klasse von mir in der alle Variablen für viele andere Klassen stehen...]:
Code:
    try {
      byte[] buf = new byte[35];
      MulticastSocket msSocket = new MulticastSocket(database.intPort2);
      msSocket.joinGroup(database.iaGroup);
      DatagramPacket dpRec;
      while ( true ) {
        dpRec = new DatagramPacket(buf, buf.length);
        msSocket.receive(dpRec);
        String strTemp = new String(dpRec.getData());
        String strName = strTemp.substring(strTemp.indexOf("|") + 1, strTemp.lastIndexOf("|"));
        if ( !strName.equals(database.strUserName) ) {
          if ( strTemp.startsWith("Onl|") || strTemp.startsWith("IVi|") ) {
            strName = strTemp.substring(strTemp.indexOf("|") + 1, strTemp.lastIndexOf("|"));
            String strIP = strTemp.substring(strTemp.lastIndexOf("|") + 1);
            if ( !database.hmContacts.containsKey(strName) && !strName.equals(database.strUserName) && !strTemp.startsWith("IVi|") ) {
              jFrParent.jdlmList.addElement(strName);
              database.hmContacts.put(strName, strIP);
              if ( database.booPopSignedOn ) {
                new Handler("Onl:<html><center>" + strName + "
Signed On</center></html>");
              }
            }
            if ( database.booVisible ) {
              Socket soSocket = new Socket();
              soSocket.connect(new InetSocketAddress(strIP, database.intPort1), 2500);
              PrintStream psOut = new PrintStream(soSocket.getOutputStream());
              psOut.println("Add|" + database.strUserName + "|" + database.strUserIP);
              psOut.close();
              soSocket.close();
            }

          } else if ( strTemp.startsWith("Esc|") ) {
            strName = strTemp.substring(strTemp.indexOf("|") + 1, strTemp.lastIndexOf("|"));
            jFrParent.jdlmList.removeElement(strName);
            database.hmContacts.remove(strName);
            if ( database.booPopSignedOff ) {
              new Handler("Esc:<html><center>" + strName + "
Signed On</center></html>" );
            }
          }
        }
      }
    } catch ( IOException ioe ) {

    }

Die nächste Möglichkeit ist, die ich aber auch nur in meinen Lösungsmöglichkeiten gehört hatte..., dass man auf eine Windowsfunktion zugreifen kann (wenn auch mit 2. Programmiersprache[Perl und Visual Basic gehen dafür]).

Du kannst ja mal sagen, was du mit den Namen machen möchtest, dann kann man mehr helfen...
 

TheJavaKid

Top Contributor
danke erstmal für den code :D

ich möchte nen lan-chat fabrizieren der auch bis jetzt super läuft (statt in der schule aufn lehrer zu hören kann man schön chatten ;) )

um nun mit jemanden zu chatten muss man ja (bei meinem chat jedenfalls) den server per Netzwerknamen (also zB.: //SERVER/SharedDocs) ansprechen (ob das per ip geht weißich nicht :oops:

damit man den servernamen nicht immer von hand eintippen muss hab ich mir überlegt die verfügbarn namen in einen String Array zu schreiben und diese Array-Daten in eine List-Box zu laden!

(klug ausgedacht nicht )
deswegen möchte ich alle verfügbaren netzwerknamen in ein array laden...
 

Stiewen

Aktives Mitglied
LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOL

Du machst genau das gleiche, was ich auch mache..., im unterricht einfach sein eigenes Projekt machen :-D ... und ich kann dir 100% Sicherheit sagen, dass das mit dem MulticastSocket und danach eine Socket verbindung aufbauen die beste lösung ist... kann dir dazu gerne mehr schreiben, wenn du möchtest... ich für meinen Teil musste mich durch viele Problemlösungsvorschläge stampfen, damit ich endlich zu der kam ... und ich habe somit den code mehr als 3 mal ändern müssen ... immer 100 Zeilen ...

ICH SAGS DIR GLEICH!!!!!! MACH MIT MULTICAST SOCKET UND DANN SOCKET VERBINDUNG!!!MACH MIT MULTICAST SOCKET UND DANN SOCKET VERBINDUNG!!!MACH MIT MULTICAST SOCKET UND DANN SOCKET VERBINDUNG!!!MACH MIT MULTICAST SOCKET UND DANN SOCKET VERBINDUNG!!!MACH MIT MULTICAST SOCKET UND DANN SOCKET VERBINDUNG!!!MACH MIT MULTICAST SOCKET UND DANN SOCKET VERBINDUNG!!!

^^

So, wie gesagt, kann ich dir noch mehr schreiben, wenn du willst...

C ya..
Stiewen
 

TheJavaKid

Top Contributor
ich mach es ganz simpel

der chatdialg wird in einer txt datei gespeichert (in einem freigegebenen ordner) und die anderen chatprogramme greifen drauf zu...
 

Stiewen

Aktives Mitglied
die idee mit der Netzwerkdatei find ich irgendwie sehr gut...


ABER: was, wenn die von irgendwelchen Leuten verändert wird? ... ich mein, man kann manchmal gar nicht so doof denken, wie manche Leute sind ;-)

was willst du denn nun machen? um mit MulticastServern zu arbeiten brauchst du java.net*; globsch ... für die Dateivariante brauchst du BufferedReader... also java.io.*;

Stiewen
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben