Beziehung zwischen Socket, port,und socketfile



  • socket zu port 1:1, socket zu CSocketFile 1 zu *, ist es richtig?



  • Du kannst auch mehrere Sockets haben die den gleichen (local) Port verwenden, nur muss local IP, destination IP und/oder destination Port unterschiedlich sein.

    Wenn du listen() und dann accept() verwendest bekommst du z.B. von accept() einen Socket dessen lokaler Port gleich dem Port ist auf dem gelauscht wird (listen()).



  • mit anderem Wort, ein Port kann mehere Sockets haben, aber auch gleichzeitig senden (empfangen)?



  • Mehrere Sockets können den gleichen lokalen (source) Port verwenden.
    Senden kannst du grundsätzlich nur mit Sockets.

    Entweder wird dabei eine Connection verwenden (z.B. bei TCP), dann entscheiden die restlichen, an den "verbundenen" Socket gebundenen Parameter (source IP, destination Port und destination IP) wo die Daten hingehen. Dasselbe passiert beim Empfangen.

    Beispiel: Ein Web-Server läuft z.B. normalerweise auf Port 80, d.h. die Connections die der Web-Server bedient verwenden allesamt den lokalen Port 80.

    Oder, wenn keine Connection im Spiel ist (z.B. bei UDP), dann muss man beim Senden die destination IP und den destination Port angeben, bzw. bekommt beim Empfangen bei jedem Paket zusätzlich die Information wo die Daten hergekommen sind (also wieder die IP und den Port der Gegenstelle).

    ----

    Anders gesagt: ein Port selbst sendet nicht, der IP-Stack sendet, und dabei wird immer das quadruplet "source IP, source Port, destination IP, destination Port" verwendet um das "von wo und wohing" zu identifizieren. Ist ein Socket connected dann sind diese Informationen an den Socket gebunden, ist er nicht connected kann man auch keine Connection-orientierten Protokolle wie TCP verwenden, und muss bei jedem Paket immer mitgeben an wen man es schicken will.


Anmelden zum Antworten