DynDns.com

Status
Nicht offen für weitere Antworten.

Fragender

Bekanntes Mitglied
ich habe 2 programme aus dem Buch java ist auch eine insel

Code:
import java.io.*;
import java.net.*;

public class Server
{
  private static void handleConnection( Socket client ) throws IOException
  {
    InputStream  in  = client.getInputStream();
    OutputStream out = client.getOutputStream();

    int factor1 = in.read();
    int factor2 = in.read();

    out.write( factor1 * factor2 );
  }

  public static void main( String[] args ) throws IOException
  {
    ServerSocket server = new ServerSocket( 3141 );

    while ( true )
    {
      Socket client = null;

      try
      {
        client = server.accept();
        handleConnection ( client );
      }
      catch ( IOException e ) {
        e.printStackTrace();
      }
      finally {
        if ( client != null )
          try { client.close(); } catch ( IOException e ) { }
      }
    }
  }
}

und

Code:
import java.net.*;
import java.io.*;

class Client
{
  public static void main( String[] args )
  {
    Socket server = null;

    try
    {
      server = new Socket( "bsp.dyndns.com", 3141 );
      InputStream  in  = server.getInputStream();
      OutputStream out = server.getOutputStream();

      out.write( 9 );
      out.write( 6 );

      int result = in.read();
      System.out.println( result );
    }
    catch ( UnknownHostException e ) {
      e.printStackTrace();
    }
    catch ( IOException e ) {
      e.printStackTrace();
    }
    finally
    {
      if ( server != null )
        try { server.close(); } catch ( IOException e ) { }
    }
  }
}

jedoch wenn ich die programme starte bekomme ich eine fehlermeldung von eclipse. (ich habe mich natürlich auf dyndns angemeldet und meine ip angegeben)

helft mir pls wenn ihr weiterwisst
 

sliwalker

Top Contributor
Hi,

was für eine Fehlermeldung?

Übliche Probleme, ohne genauer auf Deinen Fall zu gucken:
Firewall, Virenprogramme, Virtueller Server bzw. Special Application im Router...

greetz
SLi
 

madboy

Top Contributor
Normalerweise kannst du nicht hinter einem Router sitzen und von innen nach außen nach innen zugreifen. Ähm. Was ich meine:
Du kannst nicht deine externe IP angeben, wenn du über einen Router gehst.
Ääähm (irgendwie fehlen mir die Worte ;-) ). Kurz gesagt: Verwende als IP 127.0.0.1 (localhost)
 
S

Spacerat

Gast
Waaas? 127.0.0.1 ist deine IP-Adresse? Dann werd' ich dich mal NUKEN! :lol:
Aber mal ernsthaft:
Ohne Fehlermeldung wird's schwierig mit der Hilfe. Da kann man eigentlich nur spekulieren. Z.B. kommt auch in betracht, das du nach einer Neuverbindung ins Internet, schlicht vergessen hast, DynDNS deine neue IP mitzuteilen. DynDNS kommt da ja nicht von selbst drauf. Da reicht es nicht, sich nur einmal anzumelden, das muß bei jeder Neuverbindung passieren.
 
Zuletzt bearbeitet von einem Moderator:

FatFire

Bekanntes Mitglied
Welche IP hast Du angegeben? Die eines eventuell vorhandenen Routers? Wenn ja: hast Du überhaupt ein Portforwarding für diesen Port auf Deinen Rechner?

Hast Du einen Router und eventuell aber die IP Deines Rechners im lokalen Netz angegeben? Wenn Deine IP wie 10.x.x.x, 172.16.x.x -172.31.x.x, oder 192.168.x.x aussieht, dann hast Du Deine lokale IP-Adresse angegeben. Das kann dann nicht funktionieren.

Du kannst nicht deine externe IP angeben, wenn du über einen Router gehst.
Klar kann er. Der Router erkennt nach DNS-Auflösung dass es eine Kommunikation ins eigene Netz ist und biegt das dann schon richtig um. Aber mein Verdacht ist irgendwie, dass er eine lokale IP an DynDNS gegeben hat.

Gruß FatFire
 

ARadauer

Top Contributor
@fragender: grundsätzlich klappt das, ich hab selber sowas laufen.
beschreib mal dein netzwerk zuhause, wo genau hängt dein rechner dran, wer geht ins internet? router usw... thema port forwarding ist sicher nicht schlecht.

und ja die fehlermeldung die ausgegeben wird wäre auch nicht schlecht.
 

ARadauer

Top Contributor
installier dir schnell mal einen xampp server, und versuche ob du über dyndns auf den web server kommst ;-)
portforwarding.. ist immer gut...

was im moment konkret passiert ist, dass dein client nicht deinen server am rechner anspricht sondern versucht sich auf den router zu verbinden... die öffentlihce ip die dyndns kennt ist nicht die deines rechners sonder die deines routers.. die deines rechners ist nach aussen gar nicht sichtbar du musst deinem router mitteilen, dass anfragen auf diesen port an deinen rechner weiter geleitet werden...
 
T

tuxedo

Gast
Ist der Fehler nicht hier zu suchen?

Java:
server = new Socket( "bsp.dyndns.com", 3141 );

Wenn der Rechner, auf dem dieser Code läuft, hinter einem Router hängt, dann dürfte das doch so gar nicht funktionieren? Man kann sich ja nicht an eine Adresse binden, die der lokale Rechner gar nicht verfügbar hat..

bsp.dyndns.com wird auf die offizielle IP, die dir dein Provider beim einwählen gegeben hat zeigen. Und die hat i.d.R. nur der Router.

Anfragern "von aussen" an deine Serveranwendung gelangen also erstmal zum Router. Der muss dann via PortForwarding entscheiden, an welchen Rechner die Anfrage weitergeleitet wird. Beispielsweise an deinen rechner mit der lokalen IP 192.168.1.5 (nur als Beispiel)...

In deiner Anwendung solltest du dich dann also so binden:

Java:
server = new Socket( "192.168.1.5", 3141 );

127.0.0.1 wäre so nicht ganz richtig, da der Socket dann nur auf localhost lauscht. Wenn dann noch "0.0.0.0" als alternative. Dann lauscht die Anwendung auf allen IP Adressen die dem Rechner zur Verfügung stehen.

FatFire hat gesagt.:
Klar kann er. Der Router erkennt nach DNS-Auflösung dass es eine Kommunikation ins eigene Netz ist und biegt das dann schon richtig um. Aber mein Verdacht ist irgendwie, dass er eine lokale IP an DynDNS gegeben hat.

Wie soll das denn gehen? "Von allein" weiß ein Router nicht an welchen der vielen hundert tausend Rechner hinter dem Router eine Anfrage weitergeleitet werden muss. PortForwarding muss man da schon selbst einrichten.

ODER, und jetzt wirds etwas aufwendiger: Der Router muss UPnP beherrschen und die eigene Anwendung muss via UPnP das PortForwarding selbst konfigurieren. Azureus und Co. machen das übrigens so...

- Alex
 

FatFire

Bekanntes Mitglied
Tuxedo, was gibt es Dir eigentlich genau das nochmal zu schreiben, was ungefähr vier Leute vor Dir (nur wesentlich kürzer) schon geschrieben haben und dann meinen Beitrag völlig aus dem Zusammenhing gerissen und damit sinnentstellend zu zitieren? Ich schrieb als allererstes in meinem Beitrag
Welche IP hast Du angegeben? Die eines eventuell vorhandenen Routers? Wenn ja: hast Du überhaupt ein Portforwarding für diesen Port auf Deinen Rechner?

Was Du da zitierst, war die Antwort auf die Frage ob er von seinem Rechner aus durchs Internet auf seinen Rechner zugreifen kann und da ist die Antwort immer noch ja, weil, wie geschrieben, der Router diese Anfragen gar nicht erst ins Internet absetzt, sondern direkt zurückschickt.

Meine Güte, erst Lesen, verstehen, dann was dazu schreiben.

Und zu Deinem Beitrag:

Java:
server = new Socket( "192.168.1.5", 3141 );
127.0.0.1 wäre so nicht ganz richtig, da der Socket dann nur auf localhost lauscht. Wenn dann noch "0.0.0.0" als alternative. Dann lauscht die Anwendung auf allen IP Adressen die dem Rechner zur Verfügung stehen.
Dir ist aber schon klar, dass Du da von einem Socket sprichst und keinem Server-Socket? Der normale Socket lauscht nicht, der stellt eine Verbindung her und mehr nicht. Und der ServerSocket lauscht so wie es in seinem Programm definiert ist schon auf allen Interfaces. Ei-ei-ei-eieiei...

Gruß FatFire
 

Fragender

Bekanntes Mitglied
also was muss ich jetzt bei dyndns.com für eine ip angeben und muss ich bei meinem router eine portweiterleitung machen? wenn ja welcher port?
danke
 

FatFire

Bekanntes Mitglied
Die IP von wieistmeineip.de ist schon die richtige. Besser ist es natürlich, wenn Dein Router DynDNS unterstützt. Dann kannst Du die Daten von DynDNS in Deinem Router eintragen und er aktualisiert den Eintrag bei DynDNS automatisch, wenn sich Deine IP (also die vom Router) ändert.

Und in Deinem Router musst Du ein Port Forwarding für Port 3141 einrichten. Also der eingehende Port 3141 muss intern auf die IP Deines Server-Rechners (diese IP findest Du über ipconfig heraus) und auch Port 3141 umgelenkt werden.

Mehr Hilfestellung könnte man geben, wenn man wüsste, welchen Router Du hast.

Gruß FatFire
 
T

tuxedo

Gast
@FatFire

Dass sich Leute immer gleich angepisst fühlen... z z z z *kopfschüttel*

Wieso gibt es mehrere java-Bücher die alle das gleiche erklären? Oder wieso gibt es mehr als eine Enzyklopädie in Buchform?
Ganz einfach: Andere Worte, selbes Thema = mehr Chancen auf besseres Verständnis.

Das mit dem Socket und ServerSocket ... Ja, in der Tat. Da hab ich mich vertan (ist mir dummerweise nicht das erste mal passiert, aber ich steh wenigstens zu meinen "Fehlern"). 127.0.0.1 wäre trotzdem nicht sonderlich richtig gewesen wenn man nicht alles auf einer Maschine laufen lässt.

Zum "Klar kann er. Der Router erkennt nach DNS-Auflösung dass es eine Kommunikation ins eigene Netz ist und biegt das dann schon richtig um." hast du dich ja gar nicht geäussert?? Gekonnt ignoriert?

Wenn ich da nochmal zitieren darf:

Meine Güte, erst Lesen, verstehen, dann was dazu schreiben.

Das in der Mitte hast du offenbar übersprungen.

Ei-ei-ei-eieiei...

Selber Ei-ei-ei-ei ...
Aber genug gedisst... *Friede*


--> *back to topic*
 

FatFire

Bekanntes Mitglied
tuxedo hat gesagt.:
Zum "Klar kann er. Der Router erkennt nach DNS-Auflösung dass es eine Kommunikation ins eigene Netz ist und biegt das dann schon richtig um." hast du dich ja gar nicht geäussert?? Gekonnt ignoriert?
Nein, das hatte ich dazu geschrieben:
FatFire hat gesagt.:
Was Du da zitierst, war die Antwort auf die Frage ob er von seinem Rechner aus durchs Internet auf seinen Rechner zugreifen kann und da ist die Antwort immer noch ja, weil, wie geschrieben, der Router diese Anfragen gar nicht erst ins Internet absetzt, sondern direkt zurückschickt.
Dabei ist natürlich Portweiterleitung vorausgesetzt. Aber das kann man auch voraussetzen, wenn man vorher die Frage stellt, ob das korrekt eingerichtet ist (was wir ja im Moment auch tun wollen).
tuxedo hat gesagt.:
(ist mir dummerweise nicht das erste mal passiert, aber ich steh wenigstens zu meinen "Fehlern")
Aha, merk ich jetzt nicht soooo viel von.
tuxedo hat gesagt.:
127.0.0.1 wäre trotzdem nicht sonderlich richtig gewesen wenn man nicht alles auf einer Maschine laufen lässt.
Ich denke, dieser Einwurf mit 127.0.0.1 war zum Testen gedacht, ob die Programme überhaupt tun was sie tun sollen, weil madboy davon ausgegangen ist, das man von einem Rechner aus nicht über DynDNS auf den gleichen Rechner wieder zugreifen kann.
Aber genug gedisst... *Friede*
Peace :)

Gruß FatFire
 

Fragender

Bekanntes Mitglied
ich weiß nich
ich hab in meinem router (D-Link) eine portweiterleitung gemacht. von eclipse kommt folgende fehlermeldung:

java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at Hauptpaket.Client.main(Client.java:16)
 

madboy

Top Contributor
Ein paar Fragen:
1. Der Server läuft auf deinem Rechner? Nennen wir ihn Rechner X
2. Der Client läuft nicht auf Rechner X? Nennen wir ihn Rechner Y
3a. Rechner Y steht bei einem Kumpel, der auf den Server zugreifen will (übers Internet)?
3b. Rechner Y steht bei dir in der Wohnung und hängt am selben Router wie Rechner X?
4. Port 3141 ist am Router (D-Link), hinter dem Rechner X sitzt, an Rechner X weiter geleitet?
5. Firewalls richtig konfiguriert bzw. testweise abgeschaltet?
6. Dyndns hat die korrekte IP-Adresse?

Falls 3b == ja: Es könnte doch ein Problem geben, wenn du den Server vom eigenen Netz aus testen willst (bisschen Klugscheißen hier ;-) ). Ältere Router besitzen teilweise keine "NAT Loopback"-Funktion. An eigenem Leib erfahren, daher habe ich das auch weiter oben geschrieben... Zufälligerweise war das damals auch ein D-Link-Modell
 

FatFire

Bekanntes Mitglied
Stimmt, völlig vergessen, dass es ja durchaus keine Selbstverständlichkeit ist mit dem NAT-Loopback. Kann man am besten klären, wenn man ihm nicht alle Infos aus der Nase ziehen müsste und wir auch noch erfahren, welchen DLink-Router er da hat (nicht Antwort a la "nen hellgrauen mit dunkelgrauem Rand und blauem Streifen" sondern Modellbezeichnung ;-) ) .
Bis dahin kann er
Java:
server = new Socket( "bsp.dyndns.com", 3141 );
durch
Java:
server = new Socket( "localhost", 3141 );
ersetzen und dann mal probieren. Wenn es dann funktioniert, liegt es eindeutig am Router (weil es kein NAT Loopback unterstützt oder die Weiterleitung nicht läuft). Die Weiterleitung kann man testen, in dem man versucht mal von außen drauf zuzugreifen.

Gruß FatFire
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen


Oben