Hallo Horst,
zum ersten Teil der Frage:
das Phänomen ist mir bekannt. Aus diesem Grund habe ich die Möglichkeit Konfigurationen zu speichern eingefügt. Ich nehme an, dass der Puffer überläuft, da mir das immer passiert, wenn ich mehrmals suche. Bei neu installierten Geräten rufe ich die SSDP auf (klappt dann eigentlich auf Anhieb) - das habe ich dann gespeichert und kann es bei Bedarf aufrufen. Sonst bei normalen Betrieb fragt es alle 5 Minuten mit einem Ping ab, ob noch alle mitmachen ![:smiley: :smiley:](https://community.symcon.de/images/emoji/win10/smiley.png?v=9)
Es findet eigentlich auch meine WLAN-Devices und das Handy. Die Function steckt hier (UPNP_Discovery_Functions.ips.php):
function mSearch($ST)
{
//Variablen------------------------------------------------------------------
$USER_AGENT = 'WINDOWS, UPnP/1.0, Intel MicroStack/1.0.1497';
$MULTICASTIP = '239.255.255.250';
$MX = 3;
$MAN = 'ssdp:discover';
$sockTimout = '10';
//Message--------------------------------------------------------------------
$msg = 'M-SEARCH * HTTP/1.1' . "
";
$msg .= 'HOST: '.$MULTICASTIP.':1900' . "
";
$msg .= 'MAN: "'. $MAN .'"' . "
";
$msg .= 'MX: '. $MX ."
";
$msg .= 'ST: ' . $ST ."
";
//$msg .= 'USER-AGENT: '. $USER_AGENT . "
";
$msg .= '' ."
";
//MULTICAST MESSAGE absetzen-------------------------------------------------
$sock = socket_create( AF_INET, SOCK_DGRAM, getprotobyname('udp') );
$opt_ret = socket_set_option( $sock, SOL_SOCKET, SO_REUSEADDR, 1 );
$send_ret = socket_sendto( $sock, $msg, strlen( $msg ), 0, $MULTICASTIP, 1900);
//TIMEOUT setzen-------------------------------------------------------------
socket_set_option( $sock, SOL_SOCKET, SO_RCVTIMEO, array( 'sec'=>$sockTimout, 'usec'=>'0' ) );
//RESPONSE empfangen und bearbeiten (parseMSearchResponse())-----------------
$response = array();
do
{
unset( $buf );
@socket_recv( $sock, $buf, 1024, MSG_WAITALL );
if( !is_null($buf) ) $response[] = parseMSearchResponse( $buf );
}
while( !is_null($buf) );
//SOCKET schliessen----------------------------------------------------------
socket_close( $sock );
return $response;
print_r ($response);
}
Wenn jemand eine gute Idee hat - gerne ! Ich habe mal mit einem Multicast-Socket (eigentlich UDP-Socket mit Cutter, Auswertescript etc.) experimentiert, aber dann wieder verlassen, da ich das auch schlecht portieren könnte.
Zum zweiten Teil:
Beim vielen herumbasteln habe ich in der iFrame-Erstellung eine Variable übersehen. In UPNP_SSDP_Device.ips.php on Line 247 muß es heissen:
//iFrame auffrischen------------------------------------------------------------
SetValue(UPNP_Browse_Webfront_iframe_Device, '<iframe src="../user/Multimedia/Discovery/Device.html" style="width: 800px" frameborder="no"</iframe>');
Und in UPNP_SSDP_Server.ips.php on Line 242:
//iFrame auffrischen------------------------------------------------------------
SetValue(UPNP_Browse_Webfront_iframe_Server, '<iframe src="../user/Multimedia/Discovery/Server.html" style="width: 800px" frameborder="no"</iframe>');
Die anderen Logs dürften bei leeren Array aufgetreten sein. Ich habe nicht so auf das Abfangen von Fehlern geachtet …
Das ganze Projekt hat sich mehr oder weniger immer weiter aus sich entwickelt, da hier und dort mal eine Idee kam.
Es gibt sehr viele Baustellen dabei, da mein eigentliches Anliegen die Machbarkeit von UPNP über IPS durch das Bereitstellen aller mir bekannten (Wireshark etc.) HTTP-Posts war (die UPNP_Functions.ips.php).
Da aber niemand so wirklich Bock auf ein Mitentwickeln hatte, dachte ich mir als noch blutiger PHP-Anfänger: „Was es nicht gibt, muss man eben selber machen“. Also - erwartet nicht zu viel von mir !
Tja ich will mal noch:
- einen Partymode für Sony-Geräte einbauen
- die Anzeige direkt vom Gerät abfragen (bisher werden beim Play-Befehl die Werte mit übegeben)
- beim Aufruf einer Playlist abfragen, ob der entsprechende Server auch bereit ist
- die Anzeige etwas optimieren (vielleicht hat jemand einen Tipp, wie ich die Seiten automatisch auf unterschiedliche Auflösungen anpassen kann)
- eventuell die Einzelscripte (diente mehr der Übersicht, da ich die einfach manchmal gedruckt in der Hand vor mir haben muß) mal zusammenführen
Gruß
André