# server client socket verbindung übers internet aufbauen



## yyannekk (19. Apr 2011)

hallo, ich hab eine server client verbindung für ein netzwerkspiel gebaut. als grundlage dienten mir
mehrere chat tutorials.
die verbindung wird über sockets realisiert. das problem ist dass

1. ich nur weiß wie ich die verbindung über den computernamen + port aufbauen kann
möchte aber lieber eine ip addresse angeben (fürs lan halt die lan ip addresse...)

2. ich absolut keine ahnung hab wie ich client und server übers internet miteinander kommunizieren lassen kann.


zB sieht die Server Seite ungefähr so aus:


```
public Server()
{
	int port = 5000;
	serverSocket = new ServerSocket( port );
}

//listen on new connections
public void run()
{
	while (true)
	{
	    Socket newSocket = null;
	    try
	    {
		newSocket = serverSocket.accept();
	    }
	    catch (IOException e)
	    {
		e.printStackTrace();
	    }
	    newSockets.add(newSocket);

	}
}
```

Die Client Seite sieht in etwa so aus:


```
public Client( String host, int port ) throws IOException
    {
        String host = "YYANNEKK-NOTEBOOK"; //ich würde hier lieber mit einer IP Addresse arbeiten
        int port = 5000;

        socket = new Socket( host , port );

        din = new DataInputStream( socket.getInputStream() );
        dout = new DataOutputStream( socket.getOutputStream() );
    }
```

d.h. ich baue die verbindung über den computernamen auf....
allerdings wird das ja wohl kaum so im internet möglich sein.
also wie baue ich die verbindung über eine ip addresse auf und wie funktioniert das übers internet
vielen dank für hilfe


----------



## eRaaaa (19. Apr 2011)

Naja ersetze einfach den Namen durch die IP ? :autsch:
Für alles andere kann man dir keine konkrete Antwort geben, da du nicht gesagt hast wo der Server laufen soll, was alles zwischen Server+Client befindet etc....
Portweiterleitung (im Router), Firewall und und sind einige Stichworte. Gibt aber auch schon einige Threads dazu hier....


----------



## yyannekk (19. Apr 2011)

ach ok das ist ja schonmal schön.
naja die verbindung soll einfach zwischen zwei rechnern die mit m internet verbunden sind entstehen.
der server pc liegt also normalerweise hinter einem router würde ich sagen.... ich such dann nochma im forum... danke


----------



## jonato (19. Apr 2011)

Hallo damit das funktioniert musst du im Router den Port freigeben und forworden zu deinem Server.. Bei deinem Client ist das ganze egal, da er ja zum verbinden einen anderen Port nutzt und diesen in der router firewall öffnet (sofern es erlaubt ist).. der router kann durch NAT das ganze dann wieder auswerten wenn eine Antwort vom Server zurück kommt..
Und wie schon erwähnt musst du die IP nehmen oder dir eine Domain kaufen und diese im DNS so einstellen das sie auf deine IP geht..
Gruß


----------



## yyannekk (20. Apr 2011)

sehr schön. hätte nicht gedacht das das alles so einfach geht. danke


----------



## yyannekk (25. Apr 2011)

ok also ich hab jetzt im router bei nat den port weitergeleitet.
nun hab ich erstma probiert das alles auf einem notebook zu testen.  d.h. ich starte die server application auf dem notebook, dannach starte ich auf demselben die client application und versuche über die öffentliche internetaddresse eine verbindung aufzubauen.
die firewall hab ich erstma deaktiviert.
eigentlich müsste es jetzt funktionieren oder? ich erhalte aber beim client eine ConnectionException:

```
java.net.ConnectException: Connection refused: connect
```
was mich auch verwundert ist dass serversocket.toString() nach dem ich den serversocket initialisiert habe folgendes liefert

```
ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=5555]
```
ist das korrekt?
ich initialisier den mit

```
ServerSocket serverSocket = new ServerSocket( 5555 );
```


----------



## jonato (26. Apr 2011)

kannst du mit telnet eine verbindung aufbauen?


----------



## yyannekk (26. Apr 2011)

also ich kenn mich mit telnet nicht aus aber ich habs jetzt mal probiert. bekomme keine verbindung.
was ich gemacht habe (benutze windows 7):

ich habe telnet client und telnet server unter 
systemsteuerung >> Programme >> Windows Funktionen aktivieren/deaktivieren 
aktiviert.
dann in der console telnet + meinelocaleipaddresse  eingegeben
ausgabe: es konnte keine verbindung hergestellt werden, port 23 verbindungsfehler

dann hab ich mir noch einen telnetserver ( KpyM Telnet SSH Server ) runtergeladen und ausgeführt
aber gleiches problem.

dann hab ich noch die öffentliche ip ausprobiert aber auch gleiches problem.

das ding ist ich sitz gerade in der uni, vielleicht hängts auch damit zusammen (das ursprüngliche problem hab ich zuhause ausprobiert)!?


////
habs jetzt zuhause auch ausprobiert aber klappt auch nicht


----------



## yyannekk (5. Mai 2011)

kann mir denn jemand sagen obs ich generell richtig gemacht habe
dann müsste ich nurnochmal alle Schritte durchgehen.

ich habe router port freigegeben. firewall ausgesschaltet und über die öffentliche ip addresse
(ausgelesen bei wieistmeineip..) verssucht verbindung aufzubauen.
ist das soweit der richtige weg?


----------

