Socket Verbindung über IP?

Extremefall

Mitglied
Hallo, ich versuche momentan, eine Verbindung zwischen zwei PCs einzurichten. Das ganze soll über Sockets funktionieren.
Leider wird der Text, der vom Client gesendet wird, nicht beim Server ausgegeben. Über den localhost klappt es. Die IP vom Router stimmt und es ist beim Router NAT (Portforwarding) aktiviert.

Client:
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
    static Socket clientSocket;
 
    public static void connectToSoccet(InetAddress IP, int port) {
        try {
            Socket clientSocket = new Socket(IP, port);
            PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(
                    clientSocket.getOutputStream()));
            printWriter.println("hhi");
            printWriter.flush();
            System.out.println(clientSocket.isConnected());
            clientSocket.close();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
           e.printStackTrace();
        }
    }
}
Server:
Code:
import java.net.*;
import java.io.*;

public class Server {
    public Server(int port) throws Exception {
        ServerSocket socketServer = new ServerSocket(port);
       while (true) {
            Socket client = socketServer.accept();
            InputStream input = client.getInputStream();
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(
                    input));
            String userInput;

            while ((userInput = stdIn.readLine()) != null) {
                System.out.println("echo: " + userInput);
            }
        }
    }
}
Aufruf:
Code:
Java Code:  
Client.connectToSoccet(InetAddress.getByName("xxx.xxx.xxx.xx"),4447);
// oder für den Server
Server server = new Server(4447);

Wo lieft wohl der Fehler? Könnt ihr mir weiterhelfen?
 
Zuletzt bearbeitet:
Ähm ... NAT und Portforwarding sind zwei verschiedene Dinge. NAT ist standardmäßig hardcoded aktiviert und lässt sich ohne spezielle Firmware auch nicht abschalten. Also hat es wenig damit zu tun das NAT aktiv ist nur weil du Portforwarding ZUSÄTZLICH aktiviert hast.
Was ich mir vorstellen könnte : ich habe einen D-Link DIR-100 ... dieser muss um die Einstellungen zu übernehmen neu gestartet werden. Versuche es doch auch mal. Vielleicht funktioniert es danach.
Auch ist die Kombinaion PrintWriter/BufferedReader schlecht gewählt. Nutze doch mal einen einfachen PrintStream.

Außerdem kannst du dir deine sehr langen imports sparen wenn du stattdessen die Pakete importierst. Also im Client genau so kurz wie im Server.

PS : Es ist schwierig Fehlerquellen auszumachen ohne die nötigen Informationen wie z.B. Router-Hersteller / -Modell / -Firmware.
 
Ich habe den folgenden Router von T-Com:
Sinus 154 DSL Basic 3
Zur Firware weiß ich leider nichts.

Seriennummer: J553461304

Ein Neustart des Routers hat leider nichts bewirkt.
 
Also was ich so über Google über das Teil rausbekommen habe :

1) garantiert wieder nur so n Werbegeschenk von der Schrott-Com ...
2) für den User nicht-zugängliche Einstellungen die ein nutzen des Port Forwardings verhindern
3) selbst ausgebildete Techniker der Schrott-Com selbst haben nur Probleme damit .. obwohl sie die Fireware genauesten kennen

Mein Rat daher *auch für zukuünftige entscheidungen* : NIE einen Router vom Provider geben lassen ... egal wie toll das Ding auch sein mag ... immer die Option NUR MODEM wählen ... dann einen EIGENEN Router kaufen *im Fachgeschäft und nicht bei Saturn , MediaMartk und CO* und sich vom Fachmann beraten lassen ob der Router das kann was man braucht. Dadurch spart man auch Geld weil man keine teuren Geräte mit Zusatz-Features kaufen muss die man dann nicht nutzt.
Wenn du dann mit deinem Router wieder zu Hause bist : Router vom Modem trennen *wenn es 2 Geräte sind ... wie man es macht wenns nur 1 ist sag ich weiter unten* -> eigenen Router dranhängen -> mit neuem Router verbinden und erstmal sichern *WLAN-PW ändern , Login-Daten des Routers ändern* -> PPPoE einrichten ... FERTIG.

Wenn es nur ein Gerät ist : vermeintliches "Router-Modem" in Optionen als reines Modem konfigurieren und dann seinen Router einfach dran.

Wenn das alles nichts hilft / dir zu kompliziert ist : Schrott-Com anrufen -> Speedport-Modem verlangen !
 
Auch wenn diese gesponsorten router nicht perfekt sind, reichen sie in 99% der Fälle. Standardkram wie portforwarding unterstützen die eigentlich alle, deiner auch. Die Firmware upzudaten ist sinnvoll, zumal dein Modell tatsächlich bei vielen irgendwelche Probleme hat.

Ich würde folgendes machen:

1. im router UPNP aktivieren
2. im router forwarding einrichten
3. per telnet oder ähnliches testen
 
AUF KEINE FALL !
Die Hardwarefirewall des Routers abzuschalten stellt ein extrem großes Sicherheitsrisiko dar !
Du könntest zum Testen dein Rechner mal als DMZ eintragen.

Was mich nur wundert : der Router bietet ein Menü zum einstellen des Port Forwardings bereit , aber die dortigen Einträge haben keinen Effekt selbst nach reboot des Routers.

*very strange*
 
Hallo,

hier wird ja diskutiert was bei deinem Router eingestellt werden soll und was nicht. Was ich mich aber gerade Frage ist, wie sieht dein Netzwerk überhaupt aus?
Du sagst, dass dein bei deinem Router Protforwarding eingeschaltet ist und auch die IP des Routers stimmt. Da du einen Telekom-Router hast, schätze ich mal, dass du bei dir Zuhause gerade testest.
Hast du zwei Netze eingerichtet, dass du bei deinem Router unbedingt Portforwading brauchst?

Du sagst auch, dass der Text nicht gesendet wird, wird denn überhaupt die Verbindung hergestellt?

Gruß

Sascha
 
Habe es nun noch einmal nach der Einstellung von DMZ probiert. Jetzt erhalte ich einen Fehler:
Code:
java.net.ConnectException: Connection timed out: 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 Client.connectToSoccet(Client.java:15)
	at Execution_Client.<init>(Execution_Client.java:6)
	at Execution_Client.main(Execution_Client.java:10)
.

Wie muss ich denn die Verbindung aufbauen? Über die InetAddress oder wie? Ist mein Code dafür richtig?
 
Zurück