Client kann den server nicht über meine no-ip adresse erreichen!

Bevor Lex eine Krise bekommt,

zeig mal bitte den Code womit Du den ServerPort öffnest und wie Du Dich vom Client her verbindest (sollten jeweils 2/3 Zeilen sein). Und zwar genau den womit Du Dich über localhost verbindest.

Ich benutze Win7, hab aber keine Firewall an!
Ich vermute mein Router unterstützt schlicht no-ip.com nicht, sondern nur das leider kostenpflichtige dynDNS.com!! ;(
Ich versuche gerade, wie bereits erwähnt, eine andere Firmware dd-wrt auf meinen Router zu laden und hoffe das er dabei nicht kaputt geht…

Ups vergessen abzusenden, egal:
dd-wrt ist auf meinem Router angekommen! Alles hat geklappt!

Leider funktioniert mein Server immer noch nicht!
Laut http://www.getip.com/ leitet meine Domain zu meiner Ip-Adresse!
Mit der IP-Adresse kann ich meinen Server allerdings auch nicht erreichen, somit können wir(hoffe ich) ausschließen das es an no-ip liegt!

Server:

int serverPort = 3443;
serverSocket = new ServerSocket(serverPort);
//Starte Thread und so weiter:
Socket newClientConnection = null;
while(true) {
     newClientConnection = serverSocket.accept();
     ...
}

Client:

            String serverAdress = "myDomain.no-ip.biz oder 123.123.2.2(my IP)";
            int serverPort = 3443;
            SocketAddress addr = new InetSocketAddress( serverAdress, serverPort );
            serverConnection = new Socket();
            serverConnection.connect( addr, 1000 ); //HIER CONNECTION TIMEOUT extra 1000 ganze sekunde genommen!
            streamOut = new ObjectOutputStream(serverConnection.getOutputStream());
            streamIn = new ObjectInputStream(serverConnection.getInputStream());

also erstmal : gleich seinen router mit ner custom-rom flashen ist ja wohl mal kaum der weg zur lösung … aber ok …
zweitens : alle DynDNS-dienste lösen lediglich einen festen host-name in eine dynamisch IP auf … (und übrigens : DynDNS.org ist kostenfrei !)
drittens : der WNR2200 ist eigentlich ein sehr gutes gerät … ich gehe hier eher von fehler 80 aus … den am router / firmware wird es ja wohl kaum liegen wenn du es auch mit einer custom-rom nicht packst
viertens : sicher das du den korrekten port an die korrekte ip routest ? und auch korrekte routing-tabellen und firewall-einträge hast ? es wird wenn dann wohl eher an deinem pc liegen als am router
fünftens : natürlich wird ein port CLOSED angezeigt … wenn dieser nicht genutzt wird … also kein serversocket aktiv auf diesem liegt und er damit “open” ist

Was ist den fehler 80?
Und ich bin mir ziemlich sicher das ich den richtigen Port an die richtige IP binde! Ändert sich die LAN-IP eigentlich oft?

Vielleicht schaffe ich es auch nicht den Server auf einen Online-Port zu binden, aber da ich mir nichtmal sicher bin das es das gibt weiß ich auch nicht wie das geht…

Vielleicht hat jemand von euch ja schonmal eine Server/Client Anwendung geschrieben die funktioniert hat… Wie habt ihr das den da gemacht?

Danke für eure Hilfe

Da solltest du vielleicht nochmal die Quelle nennen. Meines Wissens ist DynDNS.org nicht mehr kostenlos.
Aber es gibt ja auch genügend Alternativen. Ich habe auch No-IP. Funktioniert problemlos.

*** Edit ***

Ah, hab was zu DynDNS gefunden: Man muss sich nun wenigstens einmal monatlich an der Webseite anmelden (IP übertragen reicht nicht mehr), um das kostenlose Konto behalten können.

wovon redest Du jetzt NAT (im Router) oder Programm :). Im Router sah es schon vorher richtig aus. Im Programm wurde ich leider aus der direkten JavaDoc (von Oracle) nicht schlau. Aber ich vermute da liegt der Fehler.

serverSocket = new ServerSocket(serverPort); dort wird der Server vermutlich an localhost bzw. 127.0.0.1 gebunden. Damit reagiert er auch nicht auf Anfragen von außen (auch nicht vom eigenen LAN aus). Verwende doch bitte serverSocket = new ServerSocket(ip, serverPort);. Über IP kannst Du sogar bestimmen auf welcher Netzwerkkarte gelauscht werden soll:
[ul]
[li]127.0.0.1 - loopback bzw. localhost 8also nur intern)[/li][li]IP einer Netzwerkkarte (z.B. 192.168.1.3) - direkt nur auf Paketen auf dieser Karte lauschen[/li][li]0.0.0.0 - friss alles was von Außen (also über alle Netzwerkkarten) kommt[/li][/ul]

serverSocket = new ServerSocket("0.0.0.0", serverPort);

im Zweifel via Telnet von einem anderem Rechner im LAN auf den TCP-Port zugreifen telnet 192.168.1.3 3443. Ab Win7 (oder schon Vista) muss Telnet erst noch über „Programme“ nachinstalliert werden (warum auch immer MS das raus genommen hat -.-)

kommt auf den Router drauf an - im Zweifelsfall einfach in der Netzwerkkarte eine feste IP geben. Ich vergebe nur für laptops DHCP-Adressen, sonst hat hier alles eine feste IP (anders sind die Geräte auch Remote nicht mehr wartbar).

Das ist schon seit Jahren so. Irgend wann wurden die freien Subdomains gekürzt und zusätzliche kostenpflichtige Dienste hinzugefügt (z.B. MX). Problematisch ist das nur bei Routern, wenn der ISP keine neue IP in regelmäßigen Abständen neu vergibt. AVM meldet sich erst wieder bei dynDNS an, wenn der ISP eine neue IP vergeben hat.

Netzwerk ist kein Hexenwerk :slight_smile:

ServerSocket()
Creates an unbound server socket.
ServerSocket(int port)
Creates a server socket, bound to the specified port.
ServerSocket(int port, int backlog)
Creates a server socket and binds it to the specified local port number, with the specified backlog.
ServerSocket(int port, int backlog, InetAddress bindAddr)
Create a server with the specified port, listen backlog, and local IP address to bind to.

Das sind die Constructoren von ServerSocket! Da gibt es, leider, den Konstruktor von dir nicht :frowning:

Habs dann so gemacht:

serverSocket = new ServerSocket(serverPort, 10, thisIp);

Teste kurz…

Keine Veränderung :frowning: :frowning:

Irgendwie ist das doch Hexenwerk :wink:
Ich werde daraus irgendwie nicht schlau
Ich hoffe du hast damit recht das es an meinem Code liegt! Dann müsste jemand aus diesem Java-Forum nämlich eine Lösung haben hoff

ach mist - mit .NET verwechselt

			socket = new ServerSocket();
			socket.bind(new InetSocketAddress(ip, port));
						socket = new Socket(ip, port);

Wobei “ip” bei beiden meine Domain oder nur unten und oben “0.0.0.0” sein muss??

Hab es jetzt so:

serverSocket.bind(new InetSocketAddress("0.0.0.0", 3443));
und später...
serverSocket.accept();

Wenn ich jetzt hier:
http://www.canyouseeme.org/
Als Port 3443 angebe sagt er mir das der Port Closed ist?!

Was mache ich falsch ich verzweifele hier gerade ein wenig… ;(

Das einfachste um Ports zu testen dürfte doch einen Webserver mit HelloWorld aufzusetzen, Port weiterleiten und per Handynetz die Seite aufrufen. Dann kann man die Weiterleitung so überprüfen.

Wie setze ich den jetzt einfach einen Webserver auf??

Das einfachste zum testen ist XAMPP
Oder mit Netbeans gehts mE noch einfacher.

Dasselbe!
localhost:8000 ->
Hallo Welt
meineDomain.no-ip.biz ->
ups google konnte die seite nicht finden…
Das die no-ip Domain zu meiner eigentlichen ip weiterleitet ist jetzt übrigens völlig sicher! Nur Ports öffnen kann ich offensichtlich nicht!

Ich zeige mal meine Configuration des Routers, vielleicht hab ich ja was falsch gemacht:

In wirklichkeit sind beide enabled…

Wenn ich das richtig verstanden habe müsste mein Java-Client jetzt über den Port 3443 und meine momentane IP(oder die dafür stehende Domain) jetzt ganz normal(wie als würde ich statt der momentanen IP, "localhost angeben) von überall auf meinen Java-Server zugreifen, oder?

Vielen Danke für eure Hilfe!!

vorrausgesetzt Du hast XAMPP (oder anderen Webserver [richtig]) installiert
welcher Link geht: Link 1 - Link 2 - Link 3

[QUOTE=IDC]Dasselbe!
localhost:8000 ->
Hallo Welt
meineDomain.no-ip.biz ->
ups google konnte die seite nicht finden…
Das die no-ip Domain zu meiner eigentlichen ip weiterleitet ist jetzt übrigens völlig sicher! Nur Ports öffnen kann ich offensichtlich nicht!

[/QUOTE]

Was hat Google damit zu tun?
Was passiert wenn du deine IP:8000 eingibst am Pc?
Was passiert wenn du deine IP:8000 eingibst am Handy übers Mobilfunknetz? = WLAN aus

Kann ich mal deine Software testen?

@Tim ebeau
sorry nicht google sondern google chrome :wink:

Beide male nichts gefunden!
@mogel

Es geht Link1!
@L-ectron-X
Was meinst du? Die Jars?

Jo, am besten mit Quellcode drin. Das ginge vielleicht schneller als viele Seiten mit Vermutungen vollzustopfen.
Obwohl hier schon richtig gute Tipps kamen.

sehr schön - dann Portweiterleitung auf Deinen Rechner und über mydomain.no-ip.biz ansurfen

Und dass ist ja wohl offensichtlich das Problem… Die Portweiterleitung!
Ist das hier denn vom Ding her richtig? :

@L-ectron-X :
Ich schreib bis morgen (oder gleich noch schnell) ein KSKB! Das stelle ich dann Code hier rein!

EDIT(hoffe das ist ok so):
Erst Server starten, dann Client(ist ja klar);
Mit localhost als serverAdress funktioniert dieser Code hervorragend! Mit meiner domain überhaupt nicht!

Server:

package server_kskb;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Server_KSKB {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        new Server_KSKB().startServer();
    }

    private ServerSocket serverSocket = null;
    MainServerThread checkForNewClients;
        boolean run_Thread_run = false;
    private ArrayList<ClientThread> clients = new ArrayList<>();

    int serverPort = 3443;

    public void startServer() {
        try {
//            InetAddress thisIp = InetAddress.getByName("0.0.0.0");
            serverSocket = new ServerSocket(/*serverPort, 10, thisIp*/);
            serverSocket.bind(new InetSocketAddress("0.0.0.0", serverPort));
            System.out.println("New Server Socket(port: "+serverPort+") initiated");
        } catch (IOException ex) {
            System.out.println("can't init new ServerSocket(with port: "+serverPort+"): " + ex.getMessage());
        }
        try {
            Thread.sleep(100);
        } catch (InterruptedException ex) {}
        run_Thread_run = true;
        checkForNewClients = new MainServerThread();
        checkForNewClients.start();
    }


    private class MainServerThread extends Thread {
        @Override
        public void run() {
            Socket newClientConnection = null;
            while (run_Thread_run) {
                try {
                    System.out.println("Server Waiting for new Client's...");
                    if (serverSocket != null && ! serverSocket.isClosed())
                        newClientConnection = serverSocket.accept();
                    System.out.println("New Client tries to connect: " + newClientConnection);
                    ObjectInputStream newClient_InputStream = new ObjectInputStream(newClientConnection.getInputStream());
                    ObjectOutputStream newClient_OutputStream = new ObjectOutputStream(newClientConnection.getOutputStream());
                    
                    logInClient(newClientConnection, newClient_InputStream, newClient_OutputStream);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
        private void logInClient(Socket newClient_Socket, ObjectInputStream newClient_InputStream, ObjectOutputStream newClient_OutputStream) throws IOException {
            ClientThread ct = new ClientThread(newClient_Socket, newClient_InputStream, newClient_OutputStream);
            ct.start();
            System.out.println("Client logged in");
            clients.add(ct);
        }
     }


     private class ClientThread extends Thread {
         private Socket clientConnection;
         private ObjectInputStream inputStream;
         private ObjectOutputStream outputStream;
            private boolean run_Thread_run = true;

         public ClientThread(Socket clientConn, ObjectInputStream inputStream, ObjectOutputStream outputStream) throws IOException {
             clientConnection = clientConn;
             this.inputStream = inputStream;
             this.outputStream = outputStream;
//             userName = inputStream.readUTF();
         }

         public void sendToClient(Object o) throws IOException {
             if (! clientConnection.isClosed() && !clientConnection.isOutputShutdown()) {
                 outputStream.writeObject(o);
                 outputStream.flush();
             }
         }

         @Override
         public void run() {
             while(run_Thread_run) {
                 try {
                     if (! clientConnection.isClosed()) {
                         Object o = inputStream.readObject();
                         System.out.println("recieved: "+o);
                     } else {
                        run_Thread_run = false;
                     }
                 } catch (IOException ex) {
                    run_Thread_run = false;
                 } catch (ClassNotFoundException ex) {
                     ex.printStackTrace();
                    run_Thread_run = false;
                 }
             }
         }

         public void close() {
             try {
                 clientConnection.close();
                 inputStream.close();
                 outputStream.close();
             } catch (IOException ex) {
                 ex.printStackTrace();
             }
         }
     }
}

Client

package server_kskb;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketTimeoutException;
import java.util.ArrayList;


public class Client_KSKB {
    private Socket serverConnection = null;
    private ObjectOutputStream streamOut = null;
    private ObjectInputStream streamIn = null;
    private MainClientThread mClT;
        private boolean run_Thread_run = false;

    String serverAdress = "localhost"; /HIER DOMAIN ALS STRING
    int serverPort = 3443;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new Client_KSKB().initConnection();
    }

    public void stopConnection() {
        run_Thread_run = false;
        try {
            if (serverConnection != null && !serverConnection.isClosed()) {
                serverConnection.close();
                System.out.println("CLOSED");
            }
        } catch (IOException ex) {
            System.out.println("stopConnection bug");
        }
        serverConnection = null;
    }

    public void initConnection() {
        stopConnection();
        try {
            System.out.println("Tries to init new Connection(ip: "+serverAdress+" port:"+serverPort+")");
            SocketAddress addr = new InetSocketAddress( serverAdress/*+":"+serverPort*/,serverPort );
            serverConnection = new Socket();
            serverConnection.connect( addr, 1000 );
            streamOut = new ObjectOutputStream(serverConnection.getOutputStream());
            streamIn = new ObjectInputStream(serverConnection.getInputStream());
            run_Thread_run = true;
            mClT = new MainClientThread();
            mClT.start();
            System.out.println("CONNECTED");
        } catch (SocketTimeoutException ex) {
            ex.printStackTrace();
            System.out.println("Server not responding");
        } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println("initConnection bug");
        }
    }

    public void sendToServer(Object o) {
        try {
            streamOut.writeObject(o);
            streamOut.flush();
        } catch(Exception ex) {
            System.out.println("send bug");
        }
    }
    public boolean isConnected() {
        return run_Thread_run && serverConnection.isConnected();
    }

    private class MainClientThread extends Thread {
        @Override
        public void run() {
            while (run_Thread_run) {
                try {
                    if (! serverConnection.isClosed()) {
                        Object o = streamIn.readObject();
                        System.out.println(o);
                    }
                } catch(Exception ex) {
                    if (serverConnection != null && !serverConnection.isClosed())
                        System.out.println("read bug");
                    stopConnection();
                }
            }
        }
    }
}