# Verbindung zweier Rechner über das Internet mit Sockets



## Vogi (2. Aug 2010)

Hallo,

ich habe mir mal einen sehr simplen Server geschrieben, der einfach nur darauf wartet, bis ein Klient zu ihm verbindet:


```
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JOptionPane;


public class Server {
	private static ServerSocket server;
	
	public static void main(String args[]){
		while(true){
			try {
				server = new ServerSocket(9999);
				Socket client = server.accept();
				JOptionPane.showMessageDialog(null, "Verbindung zu einem Klienten hergestellt");
				while(true){
					
				}
			} catch (Exception e) {
				try {
					e.printStackTrace();
					if(server != null){
						server.close();
					}
					JOptionPane.showMessageDialog(null,"Verbindung zum Klienten abgebrochen");
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		}
	}
}
```

Nun habe ich folgenden Klienten:


```
import java.net.Socket;

public class Klient {
	private static Socket client;
	
	public static void main(String... args){
		while(true){
			try{
				String adresse = "84.159.48.116"; //dies ist die aktuelle IP-Adresse meines Routers
				client = new Socket(adresse,9999);
				while(true){
					
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		
	}
}
```

Bei dem Router habe ich den Port 9999 übrigens freigegeben.

Wenn ich nun aber Klient und server starte, dann passiert ger nichts. Wenn ich das ganze aber nicht über das Internet mache, sondern mit adresse = "192.168.1.103" (meine lokale IP-Adresse= funktioniert das ganze. Das lustige ist auch, das der Server denkt, ein Klient habe connectet, wenn ich dieses Tool für port 9999 durchführe : Open Port Check Tool - Test Port Forwarding on Your Router . Das Problem scheint also beim Klienten zu liegen? 

Anmerkung:
Ich habe keinen aktiven Firewall.


----------



## Kr0e (3. Aug 2010)

Vlt den Port fürs falsche Protokoll eingestellt beim Router ? 
Wenns im Lan klappt muss es ja daran liegen .... Oder vlt die IP auf den falschen Rechner bei euch im Lan umgestellt ?!


----------



## Vogi (3. Aug 2010)

es gibt beim Router 3 Möglichkeiten für das Protokoll :

1.) TCP

2.) UDP

3.) TCP + UDP

ich habe 3.) genommen, und die IP ist auch richtig. Das die Weiterleitung richtig funtkioniert sieht man eigentich ja auch daran, dass mein Server das Port-Check-Tool als Client erkennt.


----------



## HoaX (4. Aug 2010)

Dann macht dein Router doch alles richtig. Die Anfrage kommt von innen auf die IP nach außen, das wird bei allen vernünftigen Routern nicht funktionieren.


----------



## Vogi (4. Aug 2010)

wenn ich das ganze von zwei verschiedenen Computern(die an verschiedenen Routern hängen) aus starte sollte es also gehen? das kann ich im moment nämich leider nicht ausprobieren.


----------



## Kr0e (4. Aug 2010)

Also bei mir klappt dein Code, wenn ich den Port freigebe.

Muss am Router liegen.

Wie macht denn ein Router UDP+TCP 
Stell mal auf TCP, dann sollte das klappen.

PS: Du hast nciht ne Softwarefirewall oder so, die das blockt, oder ?


----------



## Vogi (4. Aug 2010)

mit software-firewall meinst du sowas wie den windows-firewall, oder? das habe ich nicht. Ich versuche es jetzt gleich mal mit TCP


----------



## Vogi (4. Aug 2010)

hm funtkioniert nicht, ich denke ich sollte wohl schon zwei verschiedene PC's nehmen, wie HoaX ja schon sagte, benutzt du etwa nur einen PC KR0E?


----------



## Kr0e (5. Aug 2010)

Habs jetzt mal mit einem Kumpel sogar getestet, der von einem anderen Ort aus auf mich zugegriffen hat...


----------

