[ENTWURF]
UDP Socket API, wie von der ehemaligen W3C Sysapps WG vorgeschlagen
Hinweis: Zum Zeitpunkt dieser Spezifikation war die STREAM-API noch nicht fertiggestellt. Diese Implementierung wird wahrscheinlich einige Anpassungen in ihren Algorithmen erfordern
Referenz: TCP-UDP-Socket-API
Was Sie beachten sollten:
readable
und writable
Stream-Eigenschaften abgeschlossen sein.Das Ziel besteht darin, Herstelleradapter zu schreiben, wie zum Beispiel:
Jeder ist herzlich willkommen, zu diesem Projekt beizutragen ;-)
//
// This example shows a simple implementation of UPnP-SSDP M-SEARCH
// discovery using a multicast UDPSocket
//
var address = '239.255.255.250' ,
port = '1900' ,
serviceType = 'upnp:rootdevice' ,
rn = 'rn' ,
search = '' ;
// Request permission to send multicast messages to the address and
// port reserved for SSDP
navigator . udpPermission . requestPermission ( { remoteAddress : "239.255.255.250" ,
remotePort : 1900 } ) . then (
( ) => {
// Permission was granted
// Create a new UDP client socket
var mySocket = new UDPSocket ( ) ;
// Build an SSDP M-SEARCH multicast message
search += 'M-SEARCH * HTTP/1.1' + rn ;
search += 'ST: ' + serviceType + rn ;
search += 'MAN: "ssdp:discover"' + rn ;
search += 'HOST: ' + address + ':' + port + rn ;
search += 'MX: 10' ;
// Receive and log SSDP M-SEARCH response messages
function receiveMSearchResponses ( ) {
mySocket . readable . getReader ( ) . read ( ) . then ( ( { value , done } ) => {
if ( done ) return ;
console . log ( 'Remote address: ' + value . remoteAddress +
'Remote port: ' + value . remotePort +
'Message: ' + ab2str ( value . data ) ) ;
// ArrayBuffer to string conversion could also be done by piping
// through a transform stream. To be updated when the Streams API
// specification has been stabilized on this point.
} ) ;
}
// Join SSDP multicast group
mySocket . joinMulticast ( address ) ;
// Send SSDP M-SEARCH multicast message
mySocket . writeable . write (
{ data : str2ab ( search ) ,
remoteAddress : address ,
remotePort : port
} ) . then (
( ) => {
// Data sent sucessfully, wait for response
console . log ( 'M-SEARCH Sent' ) ;
receiveMSearchResponses ( ) ;
} ,
e => console . error ( "Sending error: " , e ) ;
) ;
// Log result of UDP socket setup.
mySocket . opened . then (
( ) => {
console . log ( "UDP socket created sucessfully" ) ;
} ,
e => console . error ( "UDP socket setup failed due to error: " , e ) ;
) ;
// Handle UDP socket closed, either as a result of the application
// calling mySocket.close() or an error causing the socket to be
// closed.
mySocket . closed . then (
( ) => {
console . log ( "Socket has been cleanly closed" ) ;
} ,
e => console . error ( "Socket closed due to error: " , e ) ;
) ;
} ,
e => console . error ( "Sending SSDP multicast messages was denied due to error: " , e ) ;
) ;
Copyright (c) 2016 Alexandre Morgaut
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, mit der Software ohne Einschränkung zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern und Zusammenführen , Kopien der Software zu veröffentlichen, zu verteilen, unterzulizenzieren und/oder zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD „WIE BESEHEN“ ZUR VERFÜGUNG GESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER URHEBERRECHTSINHABER HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNG, WEDER AUS EINER VERTRAGLICHEN HANDLUNG, AUS HANDLUNG ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IN ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN IN DER SOFTWARE ERGEBEN SOFTWARE.