# Was ist ein Socket?



## benija (15. Juni 2008)

Hallo Community!

Meine Frage, was ist ein Socket, hört sich natürlich relativ einfach an, aber das scheint es nur Im grunde genommen, weiß ich auch, was ein Socket ist, jedoch kann ich mir dir funktionsweise nicht wirkich vorstellen.

zB ist unklar, ob ein Server, wenn er eine Anfrage akzeptiert ebenfalls ein socket erstellt? 
oder wie komunizieren Client und Server in bezug mit dem Socket miteineander?

Wäre super, wenn mir jemand eine Beschreibung zur funktionsweise von ClientSockets und ServerSockets geben könnte. 

In wikipedia habe ich mich schon schlau gemacht, aber das versteht ein normaler Mensch lieder nicht ;-) 

Vielen Dank


----------



## Dario Linsky (15. Juni 2008)

Hi,

ein Socket ist, ganz grob ausgedrückt, eine Kombination von IP-Adresse und Port zusammen mit einem Programm, das daran gebunden ist. Beispielsweise bildet ein lokaler Webserver ein Socket, denn er ist an die IP-Adresse 127.0.0.1 (localhost) und den Port 80 gebunden.

Sockets werden zur Verbindung gebraucht, weil diese die Verbindungs- und "Rücksende"-Informationen für TCP/IP ganz gut kapseln.

Nochmal zum Beispiel Webserver: Der Server läuft nicht mehr auf Loopback, sondern auf 192.168.0.1:80. Damit steht das Server-Socket. Kommt eine Anfrage rein, empfängt der Server das Client-Socket, um zu wissen, wohin die Antwort zurück geschickt werden muss. Erst dann wird die Anfrage verarbeitet und die Antwort wird an den Client-Rechner (z.B. mit dem Socket 192.168.0.2:57648) zurück geschickt.

Client-Anwendungen werden ebenfalls an Sockets gebunden, allerdings werden die Ports da meistens automatisch vergeben. Im Gegensatz zu Servern ist es bei Clients ja nicht zwingend wichtig, dass sie immer unter der gleichen IP und dem gleichen Port erreichbar sind.

Grüße, D.

P.S.: Die eigentliche Bedeutung des Begriffs Socket (deutsch etwa "Steckdose") hilft zusätzlich beim Verständnis. Du kannst dir ein Socket also als eine Art von "Steckdose" vorstellen, in das ein virtuelles Kabel gesteckt wird, über das dann der eigentliche Datenaustausch läuft.


----------



## benija (15. Juni 2008)

okay danke...hat mir auf jedenfall schonmal weiter geholfen!

Mal an einem beispiel:

  Socket socke = servSocket.accept();  //im Quellcode des Servers

Diese Zeile sagt doch aus, dass ein Socket namens socke vom Server erzeugt wird, wenn das servSocket die eingehdne Verbindung eines ClientsSockets akzeptiert?

oder lieg ich da jetzt ganz flasch? Wenn nicht, wofür wird dieses vom Server erstellte Socket benötigt? Weil dann hat ja der Server und auch der Client ein "normales" Socket....


----------



## zeja (15. Juni 2008)

Wenn mans so schreibt:

```
ServerSocket server = new ServerSocket(3097);
Socket client = server.accept();
```

Und im Client ja sowas steht:

```
Socket client = new Socket("localhost",3097);
```

So, sieht man ganz gut wies funktioniert: Du hast einen Socket auf dem Server und einen auf dem Client. Mit accept bekommt der Server den Socket vom Client und kann darüber mit dem Client kommunizieren.

Der Client kann über den Socket direkt mit dem Server kommunizieren. Am Server kann es aber ja mehrere Clients geben.


----------



## benija (15. Juni 2008)

ok gut das ist jetzt klar, war bisschen verwirrend, weil bei wikipedia folgendes stand:

Server-seitig:

    * Server-Socket erstellen
    * Binden des Sockets an eine Adresse (Port), über welche Anfragen akzeptiert werden
    * Auf Anfragen warten
* * Anfragen akzeptieren und damit einen neuen Socket für diesen Client erstellen*
    * Bearbeiten der Client-Anfrage auf dem neuen Client-Socket
    * Client-Socket wieder schließen.

das von mir makierte verstehe ich nicht.... eingentlich nimmt er ja das Socket vom Client entgegen und erstellt nicht ein neues?

oder?


----------



## zeja (15. Juni 2008)

Wikipedia ist ja auch keine Quelle in der es unbedingt richtig stehen muß 

Mit erstellen ist wohl eher merken des Socket-Objektes gemeint.


----------

