Paquete | flash.net |
Clase | public class DatagramSocket |
Herencia | DatagramSocket EventDispatcher Object |
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Compatibilidad con perfil de AIR: esta característica se admite en todos los sistemas operativos de escritorio, en iOS (a partir de AIR 3.8) y en Android (a partir de AIR 3.8). Esta característica no se admite en dispositivos de AIR para TV. Puede comprobar la compatibilidad en tiempo de ejecución mediante la propiedad DatagramSocket.isSupported
. Consulte Compatibilidad con perfil de AIR para obtener información sobre la compatibilidad de la API con varios perfiles.
Los paquetes de datagramas se transmiten individualmente entre el origen y el destino. Los paquetes pueden llegar en un orden diferente al que fueron enviados. Los paquetes perdidos en la transmisión no se retransmiten, ni siquiera se detectan.
Los datos enviados mediante un socket de datagrama no se desglosan automáticamente en paquetes de tamaño transferible. Si envía un paquete UDP que exceda el tamaño de unidad de transmisión máxima (MTU), la red eliminará el paquete (sin advertencia). La limitación de MTU es la MTU menor de cualquier interfaz, o el router en la ruta de transmisión. Puede utilizar la clase NetworkInterface para determinar la MTU de la interfaz local, pero otros nodos de la red pueden tener diferentes valores de MTU.
La clase Socket utiliza TCP que garantiza la entrega de paquetes y divide y monta automáticamente paquetes de gran tamaño. TCP también proporciona una mejor gestión de ancho de banda de red. Estas funciones implican que los datos enviados mediante un socket TCP tienen una mayor latencia, pero en la mayoría de los casos, las ventajas de TCP superan con mucho los inconvenientes. La mayoría de las comunicaciones de red deben utilizar la clase Socket y no la clase DatagramSocket.
La clase DatagramSocket resulta útil para trabajar con aplicaciones donde las pequeñas latencias de transmisión resultan importantes y se admite cierta pérdida de paquetes. Por ejemplo, las operaciones de red en aplicaciones de voz sobre IP (VoIP) y los juegos en tiempo real de varios jugadores se benefician a menudo del UDP. La clase DatagramSocket también resulta útil en determinadas aplicaciones del lado del servidor. Dado que el UDP es un protocolo sin estado, un servidor puede gestionar más peticiones de más clientes que con TCP.
La clase DatagramSocket sólo se puede utilizar en aplicaciones de Adobe AIR y únicamente en el entorno limitado de seguridad de la aplicación.
Para obtener más información, consulte el tema del Centro de desarrollo de Flash Player Seguridad.
Más información
Elementos de API relacionados
Propiedad | Definido por | ||
---|---|---|---|
bound : Boolean [solo lectura]
Indica si este objeto Socket está vinculado actualmente a una dirección local y a un puerto. | DatagramSocket | ||
connected : Boolean [solo lectura]
Indica si este objeto Socket está conectado actualmente a una dirección remota y a un puerto. | DatagramSocket | ||
constructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada. | Object | ||
isSupported : Boolean [estática] [solo lectura]
Indica si las funciones de DatagramSocket se admiten en el entorno del motor de ejecución. | DatagramSocket | ||
localAddress : String [solo lectura]
La dirección IP a la que este socket está vinculado en el equipo local. | DatagramSocket | ||
localPort : int [solo lectura]
El puerto al que este socket está vinculado en el equipo local. | DatagramSocket | ||
remoteAddress : String [solo lectura]
La dirección IP del equipo remoto a la que este socket está conectado. | DatagramSocket | ||
remotePort : int [solo lectura]
El puerto del equipo remoto al que este socket está conectado. | DatagramSocket |
Método | Definido por | ||
---|---|---|---|
Crea un objeto DatagramSocket. | DatagramSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registra un objeto de detector de eventos con un objeto EventDispatcher, de modo que el detector reciba la notificación de un evento. | EventDispatcher | ||
Vincula este socket con la dirección local y el puerto especificados. | DatagramSocket | ||
Cierra el socket. | DatagramSocket | ||
Se conecta al socket con una dirección remota y un puerto especificados. | DatagramSocket | ||
Distribuye un evento en el flujo del evento. | EventDispatcher | ||
Comprueba si el objeto EventDispatcher tiene detectores registrados para un tipo concreto de evento. | EventDispatcher | ||
Indica si un objeto tiene definida una propiedad especificada. | Object | ||
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. | Object | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Habilita este objeto DatagramSocket para recibir paquetes entrantes en la dirección IP y el puerto especificados. | DatagramSocket | ||
Elimina un detector del objeto EventDispatcher. | EventDispatcher | ||
Envía un paquete que contiene los bytes del ByteArray mediante UDP. | DatagramSocket | ||
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. | Object | ||
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional. | Object | ||
Devuelve la representación de cadena del objeto especificado. | Object | ||
Devuelve el valor simple del objeto especificado. | Object | ||
Comprueba si hay registrado un detector de eventos con este objeto EventDispatcher o con cualquiera de sus ascendientes para el tipo de evento concreto. | EventDispatcher |
Evento | Resumen | Definido por | ||
---|---|---|---|---|
[evento broadcast] Se distribuye cuando Flash Player o AIR pasan a estar activos. | EventDispatcher | |||
Se distribuye cuando el sistema operativo cierra este socket. | DatagramSocket | |||
Se distribuye cuando este socket recibe un paquete de datos. | DatagramSocket | |||
[evento broadcast] Se distribuye cuando Flash Player o de AIR pasan a estar inactivos. | EventDispatcher | |||
Se distribuye cuando este socket recibe un error de E/S. | DatagramSocket |
bound | propiedad |
connected | propiedad |
connected:Boolean
[solo lectura] Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Indica si este objeto Socket está conectado actualmente a una dirección remota y a un puerto.
Nota: un valor true
no significa que un equipo remoto esté detectando la dirección y el puerto conectados. Esto sólo significa que este objeto DataGramSocket únicamente enviará o recibirá datos desde dicha dirección y puerto.
Implementación
public function get connected():Boolean
Elementos de API relacionados
isSupported | propiedad |
localAddress | propiedad |
localPort | propiedad |
remoteAddress | propiedad |
remotePort | propiedad |
DatagramSocket | () | Información sobre |
public function DatagramSocket()
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Crea un objeto DatagramSocket.
Emite
SecurityError — si el contenido fuera del entorno limitado de seguridad de la aplicación de AIR intenta crear un objeto DatagramSocket.
|
bind | () | método |
public function bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Vincula este socket con la dirección local y el puerto especificados.
El método bind()
se ejecuta sincrónicamente. La operación de vinculación se completa antes de que se ejecute la siguiente línea del código.
Parámetros
localPort:int (default = 0 ) — El número del puerto para vincular en el equipo local. Si localPort se establece en 0 (valor predeterminado), se vincula el siguiente puerto disponible en el sistema. El permiso para conectarse a un número de puerto inferior a 1024 está sujeto a la política de seguridad del sistema. En sistemas Mac y Linux, por ejemplo, la aplicación debe estar ejecutándose con privilegios de raíz para conectarse a puertos inferiores a 1024.
| |
localAddress:String (default = "0.0.0.0 ") — La dirección IP del equipo local para vincular. Esta dirección puede ser una dirección IPv4 o IPv6. Si localAddress se establece en 0.0.0.0 (el valor predeterminado), el socket escucha todas las direcciones IPv4 disponibles. Para escuchar en todas las direcciones IPv6 disponibles, debe especificar "::" como argumento localAddress . Para utilizar una dirección IPv6, el equipo y la red deben estar configurados para admitir IPv6. Además, un socket vinculado a una dirección IPv4 no puede conectarse a un socket con una dirección IPv6. Además, un socket vinculado a una dirección IPv6 no puede conectarse a un socket con una dirección IPv4. El tipo de dirección debe coincidir.
|
Emite
RangeError — Este error se produce cuando localPort es menor que 0 o mayor que 65535.
| |
ArgumentError — Este error se produce cuando localAddress no es una una dirección IP con sintaxis válida.
| |
IOError — Este error se produce si el socket no se puede vincular, por ejemplo:
| |
Error — Este error se produce cuando localAddress no es una una dirección IP con sintaxis válida.
|
Ejemplo ( Cómo utilizar este ejemplo )
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 | () | método |
public function close():void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Cierra el socket.
El socket se desconectado del equipo remoto y se desvincula del equipo local. Un socket cerrado no se puede reutilizar.
Emite
IOError — Si el socket no puede estar cerrado (debido a un error interno, de red o del sistema operativo), o si el socket no está abierto.
|
connect | () | método |
public function connect(remoteAddress:String, remotePort:int):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Se conecta al socket con una dirección remota y un puerto especificados.
Cuando un socket de datagrama está “conectado”, los paquetes del datagrama sólo se pueden enviar y recibir desde el destino especificado. Los paquetes de otros orígenes se omiten. No es necesario conectar un socket datagrama. Establecer una conexión puede eliminar la necesidad de filtrar paquetes innecesarios de otros orígenes. No obstante, una conexión de socket UDP no es una conexión de red persistente (como ocurre en las conexiones TCP). Es posible que el final remoto del socket ni siquiera exista.
Si no se ha llamado al método bind()
, el socket se vincula automáticamente a la dirección local y al puerto predeterminado.
Parámetros
remoteAddress:String — La dirección IP del equipo remoto con la se establece una conexión. Esta dirección puede ser una dirección IPv4 o IPv6. Si no se llama al método bind() , se utiliza la familia de direcciones de remoteAddress , IPv4 o IPv6, cuando se llama al método predeterminado bind() .
| |
remotePort:int — Número de puerto en el equipo remoto utilizado para establecer una conexión.
|
Emite
RangeError — Este error se produce cuando localPort es menor que 1 o mayor que 65535.
| |
ArgumentError — Este error se produce cuando localAddress no es una una dirección con sintaxis válida. O cuando se utiliza una dirección de ruta predeterminada (0.0.0.0' o '::')'.
| |
IOError — Este error se produce si el socket no se puede conectar, por ejemplo, si no se ha llamado antes a bind() que a connect() y no es posible la vinculación con la familia remota de direcciones.
|
receive | () | método |
public function receive():void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Habilita este objeto DatagramSocket para recibir paquetes entrantes en la dirección IP y el puerto especificados.
La función se devuelve inmediatamente. El objeto DatagramSocket distribuye un evento data
cuando se recibe un paquete de datos.
Eventos
data: — cuando se recibe un paquete UDP.
|
send | () | método |
public function send(bytes:ByteArray, offset:uint = 0, length:uint = 0, address:String = null, port:int = 0):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Envía un paquete que contiene los bytes del ByteArray mediante UDP.
Si el socket está conectado, el paquete se envía a la dirección remota y el puerto especificado en el método connect()
y no se puede especificar el puerto y la dirección IP de destino. Si el socket no está conectado, el paquete se envía a la dirección y al puerto especificados, y debe proporcionar valores válidos para address
y port
. Si no se ha llamado al método bind()
, el socket se vincula automáticamente a la dirección local y al puerto predeterminado.
Nota: no se admite el envío de datos a una dirección de difusión.
Parámetros
bytes:ByteArray — un objeto ByteArray que contiene los datos del paquete.
| |
offset:uint (default = 0 ) — El desplazamiento basado en cero del objeto bytes de ByteArray en el que comienza el paquete.
| |
length:uint (default = 0 ) — El número de bytes en el paquete. El valor predeterminado de 0 hace que se escriba en todo el ByteArray, comenzando por el valor especificado con el parámetro offset .
| |
address:String (default = null ) — La dirección IPv4 o IPv6 del equipo remoto. Es necesaria una dirección si no se ha especificado mediante el método connect() .
| |
port:int (default = 0 ) — El número de puerto del equipo remoto. Se necesita un valor mayor que 0 y menor que 65536 si el puerto aún no se ha especificado mediante el método connect() .
|
Emite
RangeError — Este error se produce cuando port es menor que 1 o mayor que 65535.
| |
ArgumentError — Si el socket no está conectado y la address no es una dirección IP con sintaxis válida.
| |
IOError — Se produce este error:
| |
Error — cuando el parámetro bytes es null .
| |
RangeError — Si offset es mayor que la longitud de la instancia de ByteArray especificada en bytes o si la cantidad de datos especificados que se va a escribir por offset más length supera los datos disponibles.
| |
IllegalOperationError — Si los parámetros address o port están especificados cuando el socket ya se ha conectado.
|
close | Evento |
flash.events.Event
propiedad Event.type =
flash.events.Event.CLOSE
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Se distribuye cuando el sistema operativo cierra este socket.
El evento close
no se distribuye cuando se llama al método close()
de DatagramSocket.
Event.CLOSE
define el valor de la propiedad type
de un objeto de evento close
.
Este evento tiene las propiedades siguientes:
Propiedad | Valor |
---|---|
bubbles | false |
cancelable | false ; no hay ningún comportamiento predeterminado que cancelar. |
currentTarget | Objeto que procesa de forma activa el objeto de evento con un detector de eventos. |
target | Objeto cuya conexión se ha cerrado. |
data | Evento |
flash.events.DatagramSocketDataEvent
propiedad DatagramSocketDataEvent.type =
flash.events.DatagramSocketDataEvent.DATA
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Se distribuye cuando este socket recibe un paquete de datos.
Define el valor de la propiedadtype
de un objeto de evento data
.
ioError | Evento |
flash.events.IOErrorEvent
propiedad IOErrorEvent.type =
flash.events.IOErrorEvent.IOERROR
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2.5 |
Se distribuye cuando este socket recibe un error de E/S.
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:12 PM Z