Pacchetto | flash.net |
Classe | public class DatagramSocket |
Ereditarietà | DatagramSocket EventDispatcher Object |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 2 |
Supporto del profilo AIR: questa funzione è supportata in tutti i sistemi operativi desktop, su iOS (a partire da AIR 3.8) e su Android (a partire da AIR 3.8). Questa funzione non è supportata nei dispositivi AIR per TV. È possibile verificare se la funzionalità è supportata in fase runtime utilizzando la proprietà DatagramSocket.isSupported
. Per ulteriori informazioni sul supporto delle API tra più profili, vedete Supporto dei profili AIR.
I pacchetti di datagrammi vengono trasmessi individualmente tra l'origine e la destinazione. I pacchetti possono arrivare in un ordine diverso rispetto a quello con cui sono stati inviati. I pacchetti persi durante la trasmissione non vengono ritrasmetti, né rilevati.
I dati inviati tramite un socket di datagramma non vengono suddivisi automaticamente in pacchetti di dimensioni trasmissibili. Se inviate un pacchetto UDP che supera le dimensioni dell'MTU (Maximum Transmission Unit), la rete lo elimina (senza avviso). La MTU che definisce il limite è la più piccola MTU di qualsiasi interfaccia, switch o router nel percorso di trasmissione. Potete utilizzare la classe NetworkInterface per determinare la MTU dell'interfaccia locale, tuttavia altri nodi nella rete possono avere dei valori MTU diversi.
La classe Socket utilizza il protocollo TCP che garantisce il recapito dei pacchetti e divide e riassembla automaticamente i pacchetti di grandi dimensioni. TCP fornisce inoltre una migliore gestione dell'ampiezza di banda della rete. Queste funzionalità significano che i dati inviati tramite un socket TCP risentono di una latenza più elevata; tuttavia, per la maggior parte degli usi, i vantaggi offerti da TCP compensano ampiamente i costi. Per la maggior parte delle comunicazioni di rete dovrebbe essere utilizzata la classe Socket anziché la classe DatagramSocket.
La classe DatagramSocket è utile quando si utilizzano applicazioni in cui una piccola latenza di trasmissione è importante e la perdita di pacchetti tollerabile. Le operazioni di rete nelle applicazioni VoIP (Voice-over-IP) e i giochi in tempo reale in modalità multiplayer, ad esempio, possono spesso beneficiare del protocollo UDP. La classe DatagramSocket è inoltre utile per alcune applicazioni sul lato server. Poiché UDP è un protocollo senza stato, un server è in grado di gestire più richieste da più client di quanto sia in grado di fare il protocollo TCP.
La classe DatagramSocket può essere utilizzata solo nelle applicazioni Adobe AIR e solo nella sandbox di sicurezza dell'applicazione.
Per ulteriori informazioni sulla sicurezza, vedete l'argomento sulla sicurezza nel Centro per sviluppatori di Flash Player .
Altri esempi
Altre informazioni
Elementi API correlati
Proprietà | Definito da | ||
---|---|---|---|
bound : Boolean [sola lettura]
Indica se questo oggetto socket è attualmente associato a una porta e un indirizzo locale. | DatagramSocket | ||
connected : Boolean [sola lettura]
Indica se questo oggetto socket è attualmente connesso a una porta e un indirizzo remoto. | DatagramSocket | ||
constructor : Object
Un riferimento all'oggetto classe o alla funzione di costruzione per una determinata istanza di oggetto. | Object | ||
isSupported : Boolean [statico] [sola lettura]
Indica se le funzioni DatagramSocket sono supportate o meno nell'ambiente runtime. | DatagramSocket | ||
localAddress : String [sola lettura]
L'indirizzo IP a cui è associato questo socket sul computer locale. | DatagramSocket | ||
localPort : int [sola lettura]
La porta a cui è associato questo socket sul computer locale. | DatagramSocket | ||
remoteAddress : String [sola lettura]
L'indirizzo IP del computer remoto a cui è connesso questo socket. | DatagramSocket | ||
remotePort : int [sola lettura]
La porta sul computer remoto a cui è connesso questo socket. | DatagramSocket |
Metodo | Definito da | ||
---|---|---|---|
Crea un oggetto DatagramSocket. | DatagramSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registra un oggetto listener di eventi con un oggetto EventDispatcher, in modo che il listener riceva la notifica di un evento. | EventDispatcher | ||
Associa questo socket alla porta e all'indirizzo locale specificati. | DatagramSocket | ||
Chiude il socket. | DatagramSocket | ||
Connette il socket a una porta e un indirizzo remoto specificati. | DatagramSocket | ||
Invia un evento nel flusso di eventi. | EventDispatcher | ||
Verifica se per l'oggetto EventDispatcher sono presenti listener registrati per un tipo specifico di evento. | EventDispatcher | ||
Indica se per un oggetto è definita una proprietà specifica. | Object | ||
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. | Object | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Abilita l'oggetto DatagramSocket a intercettare i pacchetti in ingresso sulla porta e sull'indirizzo IP associati. | DatagramSocket | ||
Rimuove un listener dall'oggetto EventDispatcher. | EventDispatcher | ||
Invia il pacchetto contenente i byte nell'oggetto ByteArray tramite UDP. | DatagramSocket | ||
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. | Object | ||
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate. | Object | ||
Restituisce la rappresentazione in formato stringa dell'oggetto specificato. | Object | ||
Restituisce il valore di base dell'oggetto specificato. | Object | ||
Verifica se un listener di eventi è registrato con questo oggetto EventDispatcher o qualsiasi suo antenato per il tipo di evento specificato. | EventDispatcher |
Evento | Riepilogo | Definito da | ||
---|---|---|---|---|
[evento di trasmissione] Inviato quando Flash Player o l'applicazione AIR ottiene lo stato di attivazione del sistema operativo ed entra nello stato attivo. | EventDispatcher | |||
Inviato quando il sistema operativo chiude questo socket. | DatagramSocket | |||
Inviato quando questo socket riceve un pacchetto di dati. | DatagramSocket | |||
[evento di trasmissione] Inviato quando Flash Player o l'applicazione AIR perde l'attivazione del sistema operativo e sta entrando nello stato inattivo. | EventDispatcher | |||
Inviato quando questo socket riceve un errore I/O. | DatagramSocket |
bound | proprietà |
connected | proprietà |
connected:Boolean
[sola lettura] Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 2 |
Indica se questo oggetto socket è attualmente connesso a una porta e un indirizzo remoto.
Nota: un valore true
non significa che sulla porta e l'indirizzo connessi sia in ascolto un computer remoto. Significa solo che questo oggetto DataGramSocket invierà o riceverà dati solo da quella porta e quell'indirizzo.
Implementazione
public function get connected():Boolean
Elementi API correlati
isSupported | proprietà |
localAddress | proprietà |
localPort | proprietà |
remoteAddress | proprietà |
remotePort | proprietà |
DatagramSocket | () | Funzione di costruzione |
public function DatagramSocket()
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 2 |
Crea un oggetto DatagramSocket.
Genera
SecurityError — Se il contenuto al di fuori della sandbox di sicurezza dell'applicazione AIR tenta di creare un oggetto DatagramSocket.
|
bind | () | metodo |
public function bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 2 |
Associa questo socket alla porta e all'indirizzo locale specificati.
Il metodo bind()
viene eseguito in modalità sincrona. L'operazione di associazione viene completata prima dell'esecuzione della successiva riga di codice.
Parametri
localPort:int (default = 0 ) — Il numero della porta da associare al computer locale. Se localPort , è impostato su 0 (valore predefinito), viene associata la successiva porta di sistema disponibile. L'autorizzazione a connettersi a un numero di porta inferiore a 1024 è soggetta ai criteri di sicurezza del sistema. Sui sistemi Mac e Linux, ad esempio, l'applicazione deve essere eseguita con privilegi a livello root per connettersi a numeri di porta inferiori a 1024.
| |
localAddress:String (default = "0.0.0.0 ") — L'indirizzo IP sul computer locale a cui stabilire l'associazione. Può essere un indirizzo IPv4 o IPv6. Se localAddress è impostato su null 0.0.0.0 (valore predefinito), il socket rimane in ascolto su tutti gli indirizzi IPv4 disponibili. Per intercettare tutti gli indirizzi IPv6 disponibili, dovete specificare "::" come argomento localAddress . Per utilizzare un indirizzo IPv6, sia il computer che la rete devono essere configurati per supportare IPv6. Inoltre, un socket associato a un indirizzo IPv4 non può connettersi a un socket con un indirizzo IPv6. In modo analogo un socket associato a un indirizzo IPv6 non può connettersi a un socket con un indirizzo IPv4. Il tipo di indirizzo deve corrispondere.
|
Genera
RangeError — Questo errore si verifica quando localPort è minore di 0 o maggiore di 65535.
| |
ArgumentError — Questo errore si verifica quando localAddress non è un indirizzo sintatticamente ben formattato.
| |
IOError — Questo errore si verifica se il socket non può essere associato, ad esempio quando:
| |
Error — Questo errore si verifica quando localAddress non è un indirizzo locale valido.
|
Esempio ( Come utilizzare questo esempio )
udpSocket.bind(); //bind to any available port, listen on all IPv4 addresses udpSocket.bind( 0, "0.0.0.0" ); //same as above udpSocket.bind( 0, "127.0.0.1" ); //any available port on the localhost address udpSocket.bind( 8989, "192.168.0.1" ); //port 8989 on a particular IPv4 address udpSocket.bind( 0, "::" ); //any available port on all IPv6 address udpSocket.bind( 8989, "::1" ); //port 8989 on the IPv6 localhost address udpSocket.bind( 8989, "2001:1890:110b:1e19:f06b:72db:7026:3d7a" ); //port 8989 on a particular IPv6 address
close | () | metodo |
public function close():void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 2 |
Chiude il socket.
Il socket viene disconnesso dal computer remoto e viene interrotta l'associazione dal computer locale. Un socket chiuso non può essere riutilizzato.
Genera
IOError — Se non è possibile chiudere il socket (a causa di un errore interno, di rete o del sistema operativo), oppure se il socket non è aperto.
|
connect | () | metodo |
public function connect(remoteAddress:String, remotePort:int):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 2 |
Connette il socket a una porta e un indirizzo remoto specificati.
Quando un socket di datagramma è "connesso", i pacchetti di datagrammi possono essere inviati e ricevuti solo dal target specificato. I pacchetti da altre origini vengono ignorati. La connessione a un socket di datagramma non è necessaria. La necessità di filtrare i pacchetti estranei da altre origini può essere eliminata stabilendo una connessione. Una connessione socket UDP non è tuttavia una connessione di rete persistente (come invece lo è una connessione TCP). L'estremità remota del socket potrebbe addirittura non esistere.
Se il metodo bind()
non è stato chiamato, il socket viene associato automaticamente alla porta e all'indirizzo locale predefiniti.
Parametri
remoteAddress:String — L'indirizzo IP del computer remoto con cui stabilire una connessione. Può essere un indirizzo IPv4 o IPv6. Se bind() non è stato chiamato, viene utilizzata la famiglia di indirizzi di remoteAddress , IPv4 o IPv6, quando si chiama il metodo bind() predefinito.
| |
remotePort:int — Il numero della porta sul computer remoto utilizzato per stabilire una connessione.
|
Genera
RangeError — Questo errore si verifica quando localPort è minore di 1 o maggiore di 65535.
| |
ArgumentError — Questo errore si verifica quando localAddress non è un indirizzo sintatticamente valido. Oppure quando viene utilizzato un indirizzo di percorso predefinito ('0.0.0.0' o '::').
| |
IOError — Questo errore si verifica se il socket non può essere connesso, ad esempio quando il metodo bind() non è stato chiamato prima della chiamata a connect() e l'associazione predefinita alla famiglia di indirizzi remota non è possibile.
|
receive | () | metodo |
public function receive():void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 2 |
Abilita l'oggetto DatagramSocket a intercettare i pacchetti in ingresso sulla porta e sull'indirizzo IP associati.
La funzione restituisce immediatamente un valore. L'oggetto DatagramSocket invia un evento data
quando viene ricevuto un pacchetto di dati.
Eventi
data: — Quando viene ricevuto un pacchetto UDP.
|
send | () | metodo |
public function send(bytes:ByteArray, offset:uint = 0, length:uint = 0, address:String = null, port:int = 0):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 2 |
Invia il pacchetto contenente i byte nell'oggetto ByteArray tramite UDP.
Se il socket è connesso, il pacchetto viene inviato all'indirizzo remoto e alla porta specificati nel metodo connect()
e non è possibile specificare un indirizzo IP e una porta. Se il socket non è connesso, il pacchetto viene inviato all'indirizzo e alla porta specificati e dovete specificare dei valori validi per address
e port
. Se il metodo bind()
non è stato chiamato, il socket viene associato automaticamente alla porta e all'indirizzo locale predefiniti.
Nota: l'invio di dati a un indirizzo broadcast non è supportato.
Parametri
bytes:ByteArray — Un oggetto ByteArray contenente i dati del pacchetto.
| |
offset:uint (default = 0 ) — L'offset a base zero nell'oggetto ByteArray bytes in corrispondenza del quale inizia il pacchetto.
| |
length:uint (default = 0 ) — Il numero di byte nel pacchetto. Il valore predefinito 0 specifica l'invio dell'intero oggetto ByteArray, a partire dal valore specificato dal parametro offset .
| |
address:String (default = null ) — L'indirizzo IPv4 o IPv6 del computer remoto. Un indirizzo è necessario se non è già stato specificato uno mediante il metodo connect() .
| |
port:int (default = 0 ) — Il numero della porta sul computer remoto remoto. Un valore maggiore di 0 e inferiore a 65536 è necessario se la porta non è già stata specificata mediante il metodo connect() .
|
Genera
RangeError — Questo errore si verifica quando port è minore di 1 o maggiore di 65535.
| |
ArgumentError — Se il socket non è connesso e address non è un indirizzo IP con formato sintattico corretto.
| |
IOError — Questo errore si verifica:
| |
Error — Quando il parametro bytes è null .
| |
RangeError — Se offset è maggiore della lunghezza dell'oggetto ByteArray specificato in byte o se la quantità specificata di dati che devono essere scritti da offset più length supera la quantità di dati disponibili.
| |
IllegalOperationError — Se i parametri address o port vengono specificati quando il socket è già stato connesso.
|
close | Evento |
flash.events.Event
proprietà Event.type =
flash.events.Event.CLOSE
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 2 |
Inviato quando il sistema operativo chiude questo socket.
L'evento close
non viene inviato quando viene chiamato il metodo DatagramSocket close()
.
Event.CLOSE
definisce il valore della proprietà type
di un oggetto evento close
.
Questo evento ha le seguenti proprietà:
Proprietà | Valore |
---|---|
bubbles | false |
cancelable | false ; non è presente alcun comportamento predefinito da annullare. |
currentTarget | L'oggetto che elabora attivamente l'oggetto Event con un listener di eventi. |
target | L'oggetto la cui connessione è stata chiusa. |
data | Evento |
flash.events.DatagramSocketDataEvent
proprietà DatagramSocketDataEvent.type =
flash.events.DatagramSocketDataEvent.DATA
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 2 |
Inviato quando questo socket riceve un pacchetto di dati.
Definisce il valore della proprietàtype
di un oggetto evento data
.
ioError | Evento |
flash.events.IOErrorEvent
proprietà IOErrorEvent.type =
flash.events.IOErrorEvent.IOERROR
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 2.5 |
Inviato quando questo socket riceve un errore I/O.
package { import flash.display.Sprite; import flash.events.DatagramSocketDataEvent; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.net.DatagramSocket; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFieldType; import flash.utils.ByteArray; import flash.utils.Timer; public class DatagramSocketExample extends Sprite { private var datagramSocket:DatagramSocket = new DatagramSocket();; private var localIP:TextField; private var localPort:TextField; private var logField:TextField; private var targetIP:TextField; private var targetPort:TextField; private var message:TextField; public function DatagramSocketExample() { setupUI(); } private function bind( event:Event ):void { if( datagramSocket.bound ) { datagramSocket.close(); datagramSocket = new DatagramSocket(); } datagramSocket.bind( parseInt( localPort.text ), localIP.text ); datagramSocket.addEventListener( DatagramSocketDataEvent.DATA, dataReceived ); datagramSocket.receive(); log( "Bound to: " + datagramSocket.localAddress + ":" + datagramSocket.localPort ); } private function dataReceived( event:DatagramSocketDataEvent ):void { //Read the data from the datagram log("Received from " + event.srcAddress + ":" + event.srcPort + "> " + event.data.readUTFBytes( event.data.bytesAvailable ) ); } private function send( event:Event ):void { //Create a message in a ByteArray var data:ByteArray = new ByteArray(); data.writeUTFBytes( message.text ); //Send a datagram to the target try { datagramSocket.send( data, 0, 0, targetIP.text, parseInt( targetPort.text )); log( "Sent message to " + targetIP.text + ":" + targetPort.text ); } catch ( error:Error ) { log( error.message ); } } private function log( text:String ):void { logField.appendText( text + "\n" ); logField.scrollV = logField.maxScrollV; trace( text ); } private function setupUI():void { targetIP = createTextField( 10, 10, "Target IP:", "192.168.0.1" ); targetPort = createTextField( 10, 35, "Target port:", "8989" ); message = createTextField( 10, 60, "Message:", "Lucy can't drink milk." ); localIP = createTextField( 10, 85, "Local IP", "0.0.0.0"); localPort = createTextField( 10, 110, "Local port:", "0" ); createTextButton( 250, 135, "Bind", bind ); createTextButton( 300, 135, "Send", send ); logField = createTextField( 10, 160, "Log:", "", false, 200 ) this.stage.nativeWindow.activate(); } private function createTextField( x:int, y:int, label:String, defaultValue:String = '', editable:Boolean = true, height:int = 20 ):TextField { var labelField:TextField = new TextField(); labelField.text = label; labelField.type = TextFieldType.DYNAMIC; labelField.width = 180; labelField.x = x; labelField.y = y; var input:TextField = new TextField(); input.text = defaultValue; input.type = TextFieldType.INPUT; input.border = editable; input.selectable = editable; input.width = 280; input.height = height; input.x = x + labelField.width; input.y = y; this.addChild( labelField ); this.addChild( input ); return input; } private function createTextButton( x:int, y:int, label:String, clickHandler:Function ):TextField { var button:TextField = new TextField(); button.htmlText = "<u><b>" + label + "</b></u>"; button.type = TextFieldType.DYNAMIC; button.selectable = false; button.width = 180; button.x = x; button.y = y; button.addEventListener( MouseEvent.CLICK, clickHandler ); this.addChild( button ); return button; } } }
Tue Jun 12 2018, 02:44 PM Z