Ein Client-Socket nicht für eingehende Verbindungen hört, dann leitet eine ausgehende Verbindung zum Server her. Der Server-Socket wartet auf eingehende Verbindungen.
Ein Server erstellt einen Socket, bindet den Socket an eine IP-Adresse und Portnummer (für TCP und UDP) und wartet dann auf eingehende Verbindungen. Wenn ein Client eine Verbindung zum Server herstellt, wird ein neuer Socket für die Kommunikation mit dem Client erstellt (nur TCP). Ein Abfragemechanismus wird verwendet, um festzustellen, ob irgendeine Aktivität in einem der offenen Sockets aufgetreten ist.
Ein Client erstellt einen Socket und stellt eine Verbindung zu einer Remote-IP-Adresse und Portnummer her (für TCP und UDP). Ein Abrufmechanismus kann verwendet werden (select(), poll(), epoll() usw.), um den Socket auf Informationen vom Server zu überwachen, ohne den Thread zu blockieren.
Falls sich der Client hinter einem Router befindet, der NAT (Network Address Translation) bereitstellt, schreibt der Router die Adresse des Clients neu, um sie der öffentlichen IP-Adresse des Routers anzupassen. Wenn der Server antwortet, ändert der Router seine öffentliche IP-Adresse zurück in die IP-Adresse des Clients. Der Router speichert eine Tabelle der aktiven Verbindungen, die er übersetzt, sodass er die Antworten des Servers dem richtigen Client zuordnen kann.
Ein kurzer [Einführung] (http://ssfnet.org/Exchange/tcp/tcpTutorialNotes.html) (im Zusammenhang mit dem TCP-Protokoll). – Vidul
Die Tatsache, dass die Verbindung direkt ist oder nicht, ändert nichts. Bytes (in Paketen) kommen zu Ihrem Computer (es kann ein Puffer auf Ihrer Netzwerkkarte sein) und als Ergebnis wird ein Signal an Ihre Software gesendet. –