Socketverbindung über das Internet - Timeout?

Extremefall

Bekanntes Mitglied
Hallo,
ich würde gerne über die öffentliche IP eine Verbindung zwischen zwei Computern aufbauen und darüber dann Daten austauschen. Ich habe schon ein kleines Programm dazu geschrieben:
Die Klasse Client:
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
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);
			OutputStream out = clientSocket.getOutputStream();
			out.write(112 + port);
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Die Klasse Server:
Java:
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: " + input.read());
			}
		}
	}
}

Auf PC A wird dann der Server gestartet:
Java:
Server server = new Server(4447);

Auf dem anderen PC anschließend der Client, der sich zum Server verbinden soll und einen Outputstream übertragen soll:
Java:
Client.connectToSoccet(InetAddress.getByName("xx.xxx.xxx.xxx"),4447);
Wieso erhalte ich wohl folgende Fehlermeldung:
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:14)
	at GUI.<init>(GUI.java:14)
	at GUI.main(GUI.java:32)
Die IP habe ich mir eine Minute vorher erst angeschaut.

Ich hoffe, ihr könnt mir weiterhelfen.
Danke schonmal.
 

Michael...

Top Contributor
Ist die verwendete IP Adresse tatsächlich die IP des "Servers"? Wie sind die Rechner verbunden? Ist ein Router oder eine Firewall dazwischen? Können die Rechner sich "sehen"? Setze mal einen ping vom Clientrechner an die IP des Servers ab.
 

Extremefall

Bekanntes Mitglied
Die Rechner können einander meines Wissens nach nicht sehen (ich finde den anderen Rechner nämlich nicht im LAN). Es gibt einen Router. Ich habe die Firewall bei beiden Rechnern deaktiviert, doch es ändert nichts. Das "pingen" mit der IP funktioniert.

Was kann ich noch machen und wie? Habe ich eventuell etwas falsch programmiert? Oder was muss ich noch machen?

Was kann ich denn mit NAT machen? Kenne mich da zugegebenermaßen nicht so gut aus. Denn das Programm sollte eigentlich funktionieren, ohne dass alle Ports erst noch manuell eingestellt werden müssen.
 
Zuletzt bearbeitet:
G

Gast2

Gast
also gut,

was zu Hölle meinst Du mit "offentlicher IP"? ... Internet? ... willst Du 2 Rechner in 2 verschiedenen DSL-Einwahlen verbinden? ... das würde auch erklären wieso Du den "anderen" Rechner nicht im LAN findest ... in dem Fall kommst Du um NAT - und dessen Probleme - nicht herum (udiags)

wenn Du die Rechner verbinden willst ohne an Ports im DSL-Gerät rumzuschrauben, brauchst Du einen öffentlichen Server ... dazu würde ich Dir aber mit Deinen Netzwerkkenntnissen nicht raten
 
T

tuxedo

Gast
Ich denke das noch fehlende Stichwort ist "Portforwarding" in Verbindung mit dem Router, hinter dem der "Server" steht. Dann klappts auch mit dem Verbindungsaufbau.

- Alex
 

Extremefall

Bekanntes Mitglied
Über Port-Forwarding weiß ich, dass dadurch die Verbindungen über den Port "weitergelitet" werden, also bestimmt wird, welcher Rechner der Zielrechner ist.

Kann man so etwas auch durch reinen Quellcode umsetzen? Wenn ja, wie? Hättet ihr passende Tutorials (am besten mit Code)? Denn es soll zur Kommunikation zwischen zwei PCs zwei Server geben.
 
T

tuxedo

Gast
Durch reinen Code ist das nicht zu bewerkstelligen. Dein Router müsste hierfür mindestens UPnP Unterstützen und aktiviert haben. Erst dann kann man per Software das Portforwarding automatisch einrichten. Mir ist allerdings kein Standard-Router bekannt der das per default aktiv hat. Wenn, dann muss man es erst noch einschalten. Und dann kann man auch gleich das Portforwarding konfigurieren.
 

Extremefall

Bekanntes Mitglied
Es gibt aber doch auch Programme, die eine Verbindung zu einem anderen Computer über IP aufbauen oder etwa nicht? Wie gehen diese vor? Welche Alternativen gäbe es zu Sockets?
 

Extremefall

Bekanntes Mitglied
Ich habe nun Port-Forwarding für den Port 4447 beim Router für UDP und TCP eingestellt. Nun habe ich auch den Server auf PC A gestartet und auf PC B habe ich den Clienten gestartet. Auf PC B habe ich zusätzlich noch das Programm IPHider am Laufen, damit Server und Client nicht die selbe IP haben. Im Programm lasse ich mir auch die iP ausgeben und diese ist unterschiedlich.

Es gibt nun keine Fehlermeldungen mehr, allerdings wird auch nichts auf dem PC A ausgegeben. Woran mag das liegen? Habe ich einen Fehler in meinem Code? Ich dachte, dadurch wird an den SocketServer die Zahl gesendet und dort ausgegeben. Von der Syntax ist es alles also wohl fehlerfrei.
 

Extremefall

Bekanntes Mitglied
Was ist wohl der Fehler? Es gibt keine Fehlermeldungen. Wieso wird auf dem PC, der als Server fungiert, nicht die Zahl ausgegeben? Habe nun doch den virtuellen Server mit dem Port erstellt. Bin am verzweifeln, da es keine Fehlermeldung mehr gibt.
 

Extremefall

Bekanntes Mitglied
Beim Debuggen habe ich leider nichts gefunden, was aber auch nichts heißen muss. Könnt ihr mich eventuell auf einen Fehler aufmerksam machen? IP etc. stimmt und es gibt weiterhin keine Fehler. Port-Forwarding habe ich am Router gemacht.
 
G

Gast2

Gast
Java:
            while ((userInput = stdIn.readLine()) != null) {
                System.out.println("echo: " + input.read());
            }
Du ließt zunächst eine komplette Zeile. Danach versuchst du nochmal ein Zeichen zu lesen. Soweit ich das sehe sendest du aber nur eine Zeile.
Lass dir hier doch hier einfach mal userInput ausgeben.

EDIT:
evtl. musst du auch noch nen Zeilenumbruch senden, sonst kann es sein dass readLine nichts liest.
 

Extremefall

Bekanntes Mitglied
Für userInput wird nichts ausgegeben. Es wird auch nicht das Wort "echo" ausgegeben. Das bedeutet im Umkehrschluss, dass die While Schleife false ergibt. Wie kann ich denn einen Zeilenumbruch einfügen? Denn mit Write übergebe ich ja einen Integer Wert. Da kann ich doch nicht einfach einen String anhängen.
 
G

Gast2

Gast
Nimm z.b. statt nem einfachen Outputstream einen PrintWriter, da hast du die Methode println. Dann wird automatisch ein Zeilenumbruch am ende gesendet.
 

Extremefall

Bekanntes Mitglied
Ich habe es nun mit dem PrintWriter probiert, leider ändert es nichts:
Java:
 PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
            printWriter.print("hhi");
            printWriter.flush();
Kann man vielleicht erst einmal irgendwie prüfen, ob eine Verbindung zum SocketServer erfolgreich war? Das ist irgendwie ziemlich komisch, dass es immer noch nicht funktioniert. :/
 
G

Gast2

Gast
du musst wie gesagt ein newLine mitsenden, damit die readLine methode eine ganze Zeile lesen kann, woher soll die sonst wissen dass die Zeile zu ende ist?
Verwende also println statt print.
 

Extremefall

Bekanntes Mitglied
clientSoccet.isConnected() liefert true.Da sollte der Fehler also nicht liegen. Die Ausgabe auf dem PC, wo ich die Klasse Server gestartet habe, erscheint dennoch nicht. Auch nicht mit dem PrintWriter. Noch irgendjemand eine Idee, wo der Fehler liegen könnte?

Hier noch einmal eine Zusammenfassung zur Übersicht:
- Port-Forwarding auf Port 4447 über NAT beim Router aktiviert
- Client verwendet das Programm IPhider, damit die IP von Client und Server nicht übereinstimmen
- Firewall bei Client und Server Rechner ist deaktiviert

Code:
Client-Klasse:
Java:
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-Klasse:
Java:
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);
			}
		}
	}
}

GUI-Aufruf:
Java:
Client.connectToSoccet(InetAddress.getByName("xxx.xxx.xxx.xx"),4447);
// oder für den Server
Server server = new Server(4447);
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Ist vielleicht eine blöde Frage, aber:

Funktioniert es den wenn Server und Client Softwäre auf dem selben Rechner laufen?
Zwischen zwei Rechnern im selben LAN?
 

Extremefall

Bekanntes Mitglied
Einen lokaler Socket habe ich auch schon ausprobiert. Mit diesem Code macht es wenig Sinn, da man für einen Rechner keine zwei Ips vergibt. Außerdem würde ich dann über den localhost eine Verbindung aufbauen und da müsste der Code erneuert werden.

Liegt es wohl an der Verbindung? Aber dann sollte es doch eine Exception geben oder? Wo kann der Fehler liegen?

Ps.: Vielen Dank schon einmal für eure Hilfe. Ich hoffe, dass ihr mir noch weiterhelfen könnt.
 
M

Marcinek

Gast
Hi,

die Antwort steht doch schon weiter oben. Du möchtest eine ZEILE einlesen hast aber keine Zeilenende.

Dieser Code scheint höchsten 50 Zeilen zu haben, wo ist das Problem das eben auf einem lokalen Rechner zu testen.

Ich teste alle meine Anwendungen auf einem Rechner.

Gruß,

Martin
 

Extremefall

Bekanntes Mitglied
Auf einem Rechner klappt es mit dem localhost. Es wird der Text ausgegeben. Also es klappt wirklich. Wo könnte also sonst der Fehler liegen? Muss ich denn bei der Socketverbindung eine iNetAddress als Parameter angeben und ist mein Code dafür richtig oder wie löse ich das Problem? Also der Code scheint ja sonst schon zu passen ;)
 

Extremefall

Bekanntes Mitglied
Das Programm läuft lokal über den localhost, doch nicht über die IP. Wo liegt also der Fehler? Ich verwende die IP, die sich auch über Seiten wie wieistmeineip.de anzeigen lässt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Q Problem bei Vergleichen von Strings übertragen über eine Socketverbindung Netzwerkprogrammierung 3
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
F Verständnisfrage Verfügbarkeit Socketverbindung Netzwerkprogrammierung 5
M Socket Probleme mit einfacher Socketverbindung Netzwerkprogrammierung 3
reibi Socket Socketverbindung nutzt welches Protokoll? Netzwerkprogrammierung 5
L Socket Socketverbindung nur im lokalen Netzwerk Netzwerkprogrammierung 12
J Socketverbindung zwischen Javaclient und C-Server Netzwerkprogrammierung 11
IT-MaD konstante Socketverbindung mit Verbindungscheck u. reconnect Netzwerkprogrammierung 5
M Socketverbindung funzt nich immer Netzwerkprogrammierung 3
0 Socketverbindung zwischen PHP und Java? Netzwerkprogrammierung 6
P Array per Socketverbindung versenden Netzwerkprogrammierung 2
D Socketverbindung schlägt fehl - Connection refused: connect Netzwerkprogrammierung 4
S Socketverbindung übers WWW Netzwerkprogrammierung 6
T :?: SHH, SSL, Tunneling bei Socketverbindung ? Netzwerkprogrammierung 6
K Tabelle im Web über Listener aufrufen Netzwerkprogrammierung 1
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
B Zip Dateien über FTP laden Netzwerkprogrammierung 2
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
L Webbasierte Anwendung - Authentifizierung über LDAP/ActiveDirectory Netzwerkprogrammierung 5
J Probleme mit Multicast über IPv6, DatagramChannel Netzwerkprogrammierung 1
S Daten über TCP/IP senden Netzwerkprogrammierung 3
T Broadcast-message über spez. Netzwerk-Schnittstelle Netzwerkprogrammierung 1
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
M Erstelltes Programm über Internet Browser ausführen Netzwerkprogrammierung 26
T VPN-Verbindung über Java Netzwerkprogrammierung 4
V Einfachen Javaserver über das Internet erreichbar machen Netzwerkprogrammierung 2
J FTP Upload über Proxy funktioniert nicht Netzwerkprogrammierung 1
E Kurze Textnachrichten über einen Server von meinem Handy auf den Computer laden. Netzwerkprogrammierung 9
J FTP FTP Zugriff über Proxy Server Netzwerkprogrammierung 1
Thallius Java Application über ZScaler benutzer? Netzwerkprogrammierung 0
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
antonbracke Multiuser Software über XMPP Server Netzwerkprogrammierung 1
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
cezary Socket ServerSocket starten über GUIIm unterstehenden Code versuche Netzwerkprogrammierung 6
I ASCII über serielle Schnittstelle Netzwerkprogrammierung 1
N RMI "RMI über Lan funktioniert nicht" & "RMI-Server im Lan scannen" Netzwerkprogrammierung 13
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
T Socket Methoden über Internet aufrufen Netzwerkprogrammierung 1
S Socket Kommunikation über Internet Netzwerkprogrammierung 1
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
K ByteArray über Netzwerk senden klappt nicht Netzwerkprogrammierung 5
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
P RMI Threads die über RMI auf Datenbank zugreifen Netzwerkprogrammierung 2
S Datei schreiben über Applet Netzwerkprogrammierung 8
G Klassen über Netzwerk kommunizieren lassen Netzwerkprogrammierung 6
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Class über Netzwerk verschicken Netzwerkprogrammierung 2
D JNLP über Webstart funktioniert nicht... Netzwerkprogrammierung 2
J Socket Dateien über Socket auf Server speichern Netzwerkprogrammierung 3
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
A Computer über Internet verbinden Netzwerkprogrammierung 12
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
c_sidi90 ideale Lösung, Screen Capture über Netzwerk Netzwerkprogrammierung 3
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
T ArrayList über Netzwerk senden! Netzwerkprogrammierung 5
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
T Verbindungsversuche über TCP Sockets von mehreren Threads führt zu Serverabsturz Netzwerkprogrammierung 2
V Authentifikation über mehrere Server? Netzwerkprogrammierung 3
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
M Map über Webservice übertragen Netzwerkprogrammierung 3
D Mehrere Clients über Java-Sockets Netzwerkprogrammierung 13
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
ruffio1978 Telnet über ein socket ansprechen Netzwerkprogrammierung 8
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
G Klassen über JMX per URLClassloader laden? Netzwerkprogrammierung 2
E Zwei PCs über das Internet miteinander verbinden? Netzwerkprogrammierung 3
M Socket Bilder über das Netzwerk übertragen Netzwerkprogrammierung 4
E Java über Socket ins Internet? Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
M Socket JavaProg über einen Clienten steuern Netzwerkprogrammierung 5
M Mail über Exchange versenden Netzwerkprogrammierung 13
F C/S über HTTPS Netzwerkprogrammierung 2
D ...class.getResourceAsStream("/meine.properties") funktioniert nicht über RMI? Netzwerkprogrammierung 3
M ganymed-ssh2.har: ftp-Verbindung über ftp-Proxy Netzwerkprogrammierung 2
J Probleme bei RSA mit byte[] bei Versand über RMI Netzwerkprogrammierung 2
Z File über Socket lesen Netzwerkprogrammierung 3
A HTTP Binärdaten über PHP-Skript in Datenbank schreiben bzw auslesen Netzwerkprogrammierung 2
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
P FTP isFile() über FTP Netzwerkprogrammierung 3
I Socket HTTP Nachrichten über Sockets verschicken Netzwerkprogrammierung 2
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
M Objekt über socket senden/empfangen Netzwerkprogrammierung 3
N Socket File über Socket vom Server an Client versenden Netzwerkprogrammierung 15
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
A UCP Connection über Proxy möglich? Netzwerkprogrammierung 7
V Verbindung zweier Rechner über das Internet mit Sockets Netzwerkprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben