Systemvariable CLIENTPORT über RegisterVariable von I/O ServerSocket

Mit der Migration (V4.0->V4.1) wurde der ServerSocket mit ClientIP/ClientPort Adressierung eingeführt:

$_IPS[‚CLIENTIP‘] (nur bei I/O ServerSocket) Empfangene IP-Adresse des Clients
$_IPS[‚CLIENTPORT‘] (nur bei I/O ServerSocket) Empfangsport des Clients

Einstellbar ist am ServerSocket nur der Port (und sonst garnichts): „Der Server Socket öffnet auf dem Server einen Port für alle Netzwerke. Es kann dann auf diesem Port gehorcht und Daten empfangen werden

In der zugeordneten RegisterVariable wird als übergeordnete Instanz der ServerSocket und als Ziel ein Skript eingetragen. Und dann gilt: „Sollte die übergeordnete Instanz ein ServerSocket sein, stehen zusätzlich noch die Daten $_IPS[‚CLIENTIP‘] und $_IPS[‚CLIENTPORT‘] zur Verfügung.“

Den im ServerSocket eingestellten Empfangs-Port als „Empfangsport des Clients“ zu bezeichnen kann ich ja noch nachvollziehen, weil ja die gleiche Port-Nummer auch als Sende-Port im ClientSocket (neben der IP-Adresse) eingestellt wird.

Selbstverständlich müssen beide Port-Nummern (ClientSocket als Sender, ServerSocket als Empfänger) gleich sein um eine Kommunikation zu ermöglichen.

Willkürlich habe ich auf beiden Seiten die Port-Nummer 45001 eingetragen, im ClientSocket noch die IP-Adresse des ServerSockets.
Im Trace der RegisterVariable erscheint dann z.B.

HEX: 10.06.18 23:54:14.00 | RECEIVED [192.168.0.144:55536] | 47 45 54 20 2F 77 65 61 74 68 65 72 73 74 61 74 69 6F 6E 2F 75 70 64 61 74 65 ...

Die Hex-Darstellung habe ich abgekürzt. In dem Trace glaube ich eine Schreibweise „IP-Adr:Port“ erkannt zu haben.
Man kann auch den IPS-Stack mit print_r($_IPS) im Skript aufzeichnen:

    [INSTANCE] => 38594
    [SELF] => 22175
    [CLIENTIP] => 192.168.0.144
    [THREAD] => 10
    [CLIENTPORT] => 55536
    [SENDER] => RegisterVariable

Warum wird als CLIENTPORT die Nummer 55536 ausgegeben, obwohl die Port-Nummer 45001 eingetragen ist?

Eine andere Kommunikation verwendet die Port-Nummer 45002, hier wird als ‚CLIENTPORT‘ 59674 ausgegeben.

Nicht dass ich unbedingt den ‚CLIENTPORT‘ benötige, ich kenne ihn ja, weil ich ihn eingestellt habe, er sollte aber schon richtig sein; oder liege ich da falsch ?

Viele Grüsse
Harald

Du liegst da falsch.
Bei TCP baut ein Client auf einem zufälligen HighPort eine Verbindung zu einen Server auf einem bestimmten ZielPort auf.
Die Ports sind eigentlich nie Identisch.
Michael

Danke fürs „Richtiglegen“ :loveips:

Habs mir in Wikipedia angesehen und begriffen:

Will ein Client eine Verbindung aufbauen, erzeugt er einen eigenen Socket aus seiner Rechneradresse und einer eigenen, noch freien Portnummer. Mit Hilfe eines ihm bekannten Ports und der Adresse des Servers kann dann eine Verbindung aufgebaut werden. Eine TCP-Verbindung ist durch folgende 4 Werte eindeutig identifiziert:

Quell-IP-Adresse
Quell-Port
Ziel-IP-Adresse
Ziel-Port

Schönen Tag noch
Harald