Socket open prüfen?

Mit welchem Befehl öffne ich denn einen Socket und wie bekomme ich raus das er offen ist?

IPS_GetProperty(14286 /[Samsung TV WZ]/, ‚Open‘);

liefert bei mir immer 1 egal ob der Socket geöffnet ist oder nicht.

Na so:


IPS_SetProperty(14286  /*[Samsung TV WZ]*/,'Open',true);
IPS_ApplyChanges(14286  /*[Samsung TV WZ]*/);
IPS_Sleep(1);
// Ab hier Daten senden....

Wie kommst du auf die 1 ? Mit print getestet ? Dann sollte auffallen das nix ausgegeben wird wenn der Port zu ist.
Korrekt wäre es so:


if (IPS_GetProperty(14286  /*[Samsung TV WZ]*/,'Open'))
{
 // Port ist offen
} else{
 // Port ist geschlossen
}

Wenn man beim testen nicht weiß welche Werte da kommen sollten, nutze ich immer var_dump um festzustellen welcher Typ Variable hier verwendet wird:


var_dump(IPS_GetProperty(14286  /*[Samsung TV WZ]*/,'Open'));
/* Ausgabe
 bool(false)
oder
bool(true)
*/

Michael

Hallo Michael,

ich habe das mal getestet.
mit folgendem Code


if (IPS_GetProperty(14286  /*[Samsung TV WZ]*/,'Open'))
{
 print_r("offen");
} else{
 print_r("zu");
}

Das Ergebnis ist immer „offen“ egal ob der Socket im Objektbaum geöffnet ist oder nicht.
Hast Du noch Ideen oder ist das ein Käfer?:slight_smile: Ich hab die neuste Beta. #3431

Geht bei mir ohne Probleme, auch mit der aktuellen Beta.
Alternativ kannst du den Status auch auslesen, da die Eigentschaft ‚Open‘ ja auch true sein kann und der Socket im Fehler steht.


<?
$status =IPS_GetInstance(29400 /*[Client Socket]*/ )["InstanceStatus"];
if ($status == 102)
{
  print "offen";
}
elseif ($status == 104)
{
  print "zu";
}
elseif ($status >= 200)
{
  print "Fehlerzustand";
}
else
{
  print "Unbekannter Status";
}
?>

Michael

Vielen Dank Michael !!
Damit geht es.
Mir erschliesst sich jedoch nicht das verhalten von IPS_Getproperty($ID_Socket, '‚Open‘);
Wenn der Socket nicht offen ist dann kann doch nicht true zurückkommen oder?

Verstehe das auch nicht :confused:
Bei mir kommt false zurück.
Michael