[ЧЕРНОВИК]
UDP Socket API, предложенный бывшей рабочей группой W3C Sysapps WG.
Примечание. На момент написания этой спецификации API STREAM еще не был окончательно доработан. Эта реализация, вероятно, потребует некоторых адаптаций алгоритмов.
Ссылка: API сокетов TCP UDP.
На что следует обратить внимание:
readable
и writable
.Целью было написать адаптеры поставщиков, такие как:
Приглашаем всех желающих внести свой вклад в этот проект ;-)
//
// 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 Александр Морго
Настоящим бесплатно любому лицу, получившему копию этого программного обеспечения и связанных с ним файлов документации («Программное обеспечение»), предоставляется разрешение на работу с Программным обеспечением без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение. публиковать, распространять, сублицензировать и/или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставлено Программное обеспечение, делать это при соблюдении следующих условий:
Вышеупомянутое уведомление об авторских правах и данное уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ЦЕННОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИХ ПРАВ НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ В ДЕЙСТВИЯХ ПО КОНТРАКТУ, ПРАВОНАРУШЕНИЮ ИЛИ ДРУГИМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ОТ, ИЗ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ, ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.