+ Antworten
Ergebnis 1 bis 3 von 3
  1. #1
    Registriert seit
    Jul 2014
    Ort
    Hannover
    Beiträge
    176

    Standard Für alle Modul Entwickler die ein Discover einbauen!

    Ich habe hier mehrere Module getestet und auch selbst das Problem beim Entwickeln schon erlebt.
    Man testet sein Discover und alle klappt SUPER, doch meist hat man in seinem Rechner nur eine aktive Netzwerkkarte.

    Damit würde ein Discover wie folgt, auch prima funtionieren.
    PHP-Code:
        ....
        
    $cs socket_create(AF_INETSOCK_DGRAMSOL_UDP);
        if (
    $cs) {
            
    socket_set_option($csSOL_SOCKETSO_REUSEADDR1);
            
    socket_set_option($csSOL_SOCKETSO_BROADCAST1);
            
    socket_set_option($csSOL_SOCKETSO_RCVTIMEO, array('sec' => 1'usec' => 0));
            ....
            
    socket_sendto($cs, .... );
            
            while (
    socket_recvfrom($cs$response10240$from$port)) {
                ...
            }
        }
        ... 
    sind aber mehrere aktive Netzwerkkarten im Rechner WLAN und LAN oder mehrere LAN / WLAN Adapter dann klappt´s nicht mit dem Discover da der $cs (Socket) keine Antworten oder mal so/mal so, erhält.
    In diesem Falle, würde ich auch generell empfehlen, den Socket an die aktive Netzwerkkarte zu binden.


    Eine Möglichkeit die aktive IP zu ermitteln wäre zB. Sys_GetNetworkInfo() sicherer ist es aber mit
    PHP-Code:
        ...
        
    $s socket_create(AF_INETSOCK_DGRAMSOL_UDP);
        
    socket_connect($s'8.8.8.8'53);  // verbinde zu UDP Adresse aber sende keine Daten
        
    socket_getsockname($s$local_ip_address$local_port);
        
    socket_close($s);
        
    // somit haben wir in $local_ip_address und $local_port die Daten zum binden des Sockets
        
    ---

        
    $cs socket_create(AF_INETSOCK_DGRAMSOL_UDP);
        if (
    $cs) {
            
    socket_set_option($csSOL_SOCKETSO_BROADCAST1);
            
    socket_set_option($csSOL_SOCKETSO_RCVTIMEO, array('sec' => 1'usec' => 0));
            
    // Hier den Socket an die active IP ... und wenn benötigt wie hier, den Port binden.
            
    socket_bind($cs,$local_ip_address,$local_port);
            ....
            
            
    socket_sendto($cs, .... );
            
            while (
    socket_recvfrom($cs$response10240$from$port)) {
                ...
            }
        } 
    damit solte es dann auch mit mehreren Netzwerkkarten zuverlässig funktionieren.

    Schönes WE an alle Leser
    cu
    Xaver

  2. #2
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    10,556

    Hast du mal meine Module getestet?
    Weil dort nutze ich socket_bind an 0.0.0.0 und das funktionierte bisher sehr gut.
    Allerdings habe ich nur mit Windows und Linux getestet. Kein Docker oder MacOS.
    Michael
    PS: ich habe es in den korrekten Bereich verschoben.
    on Win10VM (ESXi): I7, 32GB RAM, HW-RAID5, 2xSat | HW: pivccu + ca.130 Geräte (ca.550ch), EM1000, CUL, 1Wire, FritzBox Cable, Android Phone + Tablet, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, RoundCube, Win2016 Ess., MediaPortal, Kodi

  3. #3
    Registriert seit
    Jul 2014
    Ort
    Hannover
    Beiträge
    176

    Zitat Zitat von Nall-chan Beitrag anzeigen
    PS: ich habe es in den korrekten Bereich verschoben.
    Danke fürs verschieben ;-)


    Ich habe nicht alle getestet . Aber bei dem aktuellen Modul von Fronzo (Broadlink) discover zb. war bind auf dieser Adresse und ich habe nichts gefunden.
    Nach dem ändern des Bind´s auf die IP und Port ging es sofort.

    Dieses verhalten habe ich zuerst bei meinen Upnp Discover Modul erlebt. Ich habe hier 4-5 aktive Netzwerk devices und ohne das binden an die aktive IP geht gar nichts.
    Außerdem arbeite und teste ich unter Windows 10 , aber auch auf meinem Server R12 wo ips aktiv läuft, der jedoch auch mehrere LANS hat , ist es genau so.

    Dazu kommt das die getesteten Module nach der Modifikation alle meine Geräte erkannt haben.

    Aber ich lerne stets und gerne dazu
    Geändert von Tierfreund (21.09.19 um 13:59 Uhr)

Ähnliche Themen

  1. Newsletter für IP-Symcon Modul-Entwickler
    Von paresy im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 5
    Letzter Beitrag: 11.12.19, 13:59
  2. Ich finde es nicht .. die Modul-Store-Regeln die ein Modul erfüllen muss ...
    Von Tierfreund im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 3
    Letzter Beitrag: 01.09.19, 12:10
  3. Alle Ereignisse für ein Element Deaktivieren
    Von Fraunhofer im Forum Skripte, PHP, SQL
    Antworten: 18
    Letzter Beitrag: 24.04.15, 12:55
  4. eDip für alle die sich darunter nicht vorstellen können.
    Von RWN im Forum Alles rund um den PC
    Antworten: 193
    Letzter Beitrag: 21.11.09, 13:10
  5. Für alle, die es klein lieben.
    Von RWN im Forum Schaufenster
    Antworten: 2
    Letzter Beitrag: 12.12.07, 20:39