IP-Adresse ermitteln

Stimmt...Daran hatte ich gar nicht gedacht..:(
D.h. jeder (!) Chat funktioniert so... Oder reicht das wenn man den Scheduler nur macht wenn ein Router vorhanden ist (kann man ja testen lassen)?

edit:
aber das ist doch total ineffektiv oder? da muss es doch eine möglichkeit geben..*denkopfaufdentischhaut*......
 
Zuletzt bearbeitet:
Halli hallo,
also zunächst mal folgendes. Ich meine man bekommt durchaus die IP-Adresse unter der der angemeldete Rechner ansprechbar ist. Keine ahnung ob dat nu die adr eines Routers sein mag oder nicht..

ich habe zum einen eine dyndns adresse in der ich das ganze recht gut verifizieren konnte (nähmlich die Adressen die mir java ausspuckt mit der adresse, die mir dyndns anzeigt verglichen)

folgende Zeilen können da sehr hilfreich sein
Code:
            String hostName = InetAddress.getLocalHost().getHostName();
            InetAddress[] adrs = InetAddress.getAllByName(hostName);
            hostAdr   = "localhost";
            System.out.println(hostAdr);
            System.out.println("Adressen:");
            for(int i=0; i<adrs.length; i++)
            {
                System.out.println(adrs[i]);
                System.out.println("Hostname ="+adrs[i].getHostName());
                System.out.println("isAnyLocalAddress ="+adrs[i].isAnyLocalAddress());
                System.out.println("isLinkLocalAddress="+adrs[i].isLinkLocalAddress());
                System.out.println("isLoopbackAddress ="+adrs[i].isLoopbackAddress());
                System.out.println("isMCGlobal        ="+adrs[i].isMCGlobal());
                System.out.println("isMCLinkLocal     ="+adrs[i].isMCLinkLocal());
                System.out.println("isMCNodeLocal     ="+adrs[i].isMCNodeLocal());
                System.out.println("isMCOrgLocal      ="+adrs[i].isMCOrgLocal());
                System.out.println("isMCSiteLocal     ="+adrs[i].isMCSiteLocal());
                System.out.println("isMulticastAddress="+adrs[i].isMulticastAddress());
                System.out.println("isSiteLocalAddress="+adrs[i].isSiteLocalAddress());
            }

und hoppla ... eine der so aufgelisteten Adressen ist die für draußen.

Ich hoffe es hilft,

Takidoso

PS: warum baust Du Dir Dein Chatprogramm nicht mit Socketprogrammierung?
ich selbst habe so die Kommunikation meines Q-Schachspiels + Chat gebastelt.
 
da fällt mir grade auf, dass das ganze auch offenbar so geht

hostAdr = InetAddress.getLocalHost().getHostAddress();

also eigetnlich ganz einfach ;-)

Wenn man den code im JDK anschaut, sieht man bei getHostAddress() lediglich ein return null;
offenbar wird da etwas beim Aufbau des Sockets so manches ausgetauscht (es lebe der Polymorphismus!)

Takidoso
 
Naja also warum ich das nicht über Sockets mache... Dann gehts ja trotzdem nicht ohne Scheduler wenn ein Router vorhanden ist..

Dann kann ich auch RMI ´benutzen, das hat den Vorteil das das eine Ebene höher abläuft und ich nicht noch viele Befehle definieren muss, die dann der Server auswertet, z.B. neue Nachricht oder neuer User usw...
 
hmmm,
also einen Scheduler? wie sollte der aussehen? und Router... sollte das dem Chatprogramm nicht egal sein?
also ich habe mein Zeug mit Hilfe eines Chatprogramm-Beispiels auf Socketebene gebaut. Das ganze Läuft über Threads.
Es gibt einen Serverthread, der im wesentlichen sich an ihn verbindende Rechner bemerkt und dafür einen sogenannten client-Thread aufmacht der dann die ankommenden Nachrichten entgegennimmt und abarbeitet. Um solche Dinge wie Es handelt sich um eine Nachricht an, oder es meldet sich jemand an, mit z.B. Usernamen oder jemand sendet eine private nachricht oder jemand sendet eine anonyme Nachricht, oder jemand macht einen Schachzug (jetzt für meinen Fall) wird mit Hilfe eines Kennwertes (man könnte auch Operationswertes Anfangs in den Bytestrohm mitgegeben. Einfach ein Integer, der dann mittels eines Switch-case ausgewertet wird.
Einen Scheduler habe ich dabei nicht basteln müssen, da ja sowieso alle angebundenen Clients auf dem Server ihren eigenen Thread haben.
Anderseits hast Du recht es ist eine Ebene tiefer. Aber ob das Know How wirklich mehr ist es zu bewerkstelligen als über RMI, denn da benötigst Du auch ne Menge Know How, da Du RMI Philosophie 'befriedigen' mußt, und mich damit auseinanderzusetzen, hatte ich irgendwie nicht so arg Lust, zumal ich ein nettes Beispiel hatte, welches ich jedoch auf meine persöhnliche Art umgebaut und erweitert hatte. Und man kann das Zeug auch prima kapseln so dass es in der eigentlichen Anwendung nicht so ein arger Wust wird.

Takidoso

PS: wie sieht eigntlich bei Dir der Scheduler prinzipiell aus und wofür wird er genau benötigt? Ich hätte sonst angenommen das es eine Nachrichten-Queue für ein Chat-System ausreichen sollte.
 
Ahhh sorry, vergiss alles was ich schrieb, nu kapiere ich warum (hihi)
Du hast zu Hause ein Netzwerk und gehst über Deinen eigenen Router raus, gelle :-D
Ich weiß zwar nicht ganz ob ich da richtig liege, aber mal ne blöde Frage ... Kann man das nicht über Proxy-Einstellungen lösen?
oder liege ich da ganz falsch?

Takidoso
 
Jo so ähnlich :D

Ich hab das Problem, das viele für die der Chat sein soll (wird später noch ein Spiel) DSL Nutzer sind. Das Problem ist nun das das über Router nicht funktioniert, da der Router die Nachrichten die der Server zum Client sendet verwirft, weil er nicht weiß für wen die Nachricht ist. Der Scheduler fragt in bestimmten Zeitabständen (ca. 1sek) beim Server nach, ob neue Events (egal was) passiert sind. Das Problem davon ist wie gesagt, das es Unmengen an Traffic verursacht.
Im Prinzip könnte man das lösen, indem man den Router so konfiguriert, das er die Nachrichten vom Server richtig weiterleitet (ich denke das meinst du mit proxy), allerdings geht das bei allen unterschiedlich, bei manchen garnicht. Und wenn jeder erst seinen Router neu konfigurieren muss um den Chat zu benutzen will das wohl keiner ;)
 
Zurück