Problem mit Client Socket (TCP)

Hallo liebe Gemeinde,

ich zweifle gerade an mir selbst…
Und zwar versuche ich ein Kommado an eine IP und einen Port zu senden (per TCP).
Dazu habe ich einen Client Socket angelegt und die Ziel-IP und Port dort eingetragen. Den Port habe ich aber nicht aktiviert, da die Gegenstelle (ein xinetd-gestartetes Shell Script) nach 3 Sekunden die Verbindungen wieder kappt.

–> Ich müsste „on demand“ den Port öffnen, das Kommando schicken und dann den Port wieder schließen.

Ich habe aber irgendwie meine Mühe gehabt hier überhaupt die Kommandos dafür zu finden, nach viel Sucherei im Forum habe ich mir folgende Befehlskette zusammengesucht:


CSCK_SetOpen(25516, true); // Socket öffnen
IPS_ApplyChanges(25516); // IPS die Öffnung durchführen lassen
CSCK_SendText(25516, "--text=\"Test\"".chr(13) ); // Kommando senden

Ursprünglich dachte ich ja, wenn man das CSCK_SendText verwendet würde automatisch die Verbindung hergestellt,
wenn man das so macht kommt aber eine Meldung dass der Socket noch nicht geöffnet wäre.
Daher das Öffnen per „SetOpen“.
Nun ist aber das Problem, dass irgendwie der Text vom „SendText“ nicht bei der Gegenstelle ankommt, der Text ist leer…
Meine Vermutung ist dass irgendwie das Portöffnen nicht mit dem SendText zusammenspielt…

Simuliere ich Ganze per „nc“ oder „PacketSender“ von der Kommandozeile funktioniert alles perfekt, d.h. die grundlegende Verbindung und die Textübermittlung in mein Shellscript klappen.

Jetzt muss ich das nur noch in IPS mit „Bordmitteln“ hinbekommen :wink:

Ich würde mich über jede Hilfe freuen :slight_smile:

Viele Grüße

Chris

Bau mal eine ganz kurze Pause mit IPS_Sleep zwischen Applychanges und dem senden ein. Ca. 1-50ms.
Und btw. SetOpen ist veraltet, schau mal hier rein.
http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/instanzenverwaltung/konfiguration/ips-setproperty/
Michael

Hey Michael,

danke für Deine Hilfe :slight_smile:

Ich habe das jetzt noch etwas umgebaut und nun geht es:


IPS_SetProperty(45887, "Open", true); // Socket öffnen
IPS_ApplyChanges(45887); // IPS die Änderung durchführen lassen
CSCK_SendText(45887, $commandIn); // Kommando senden
IPS_SetProperty(45887, "Open", false); // Socket schließen
IPS_ApplyChanges(45887); // IPS die Änderung durchführen lassen

Es geht sogar ohne das Sleep…
Ich denke mal das Problem könnte das fehlende explizite Schließen gewesen sein?
Danke auch für den Hinweis mit dem veralteten SetOpen, ich habe das gleich eingebaut :slight_smile:

Naja ich bin jedenfalls happy dass es jetzt geht :slight_smile:

Viele Grüße

Chris

Könnte mir nur vorstellen das er beim Schließen den Buffer des Socket leert.
Aber hier kann vielleicht Paresy etwas mehr zu sagen ?
Michael

Ich kann mir leider nicht erklären, woran es liegen könnte, dass nichts auf den Socket gesendet wird. Normalerweise sollte es auch ohne dem Close problemlos funktionieren.

paresy

Hauptsache es geht jetzt :wink:

Danke euch :slight_smile: