Paquete | flash.net |
Clase | public class ServerSocket |
Herencia | ServerSocket 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 ServerSocket.isSupported
. Consulte Compatibilidad con perfil de AIR para obtener información sobre la compatibilidad de la API con varios perfiles.
Un servidor TCP detecta conexiones entrantes de clientes remotos. Cuando un cliente intenta conectarse, ServerSocket distribuye un evento connect
. El objeto ServerSocketConnectEvent distribuido para el evento proporciona un objeto Socket que representa la conexión TCP entre el servidor y el cliente. Utilice este objeto Socket para todas las comunicaciones con el cliente conectado. Puede obtener la dirección del cliente y el puerto en el objeto Socket, si es necesario.
Nota: tenga en cuenta que su aplicación es responsable de mantener una referencia al objeto Socket. Si no lo hace, el objeto estará disponible para la recolección de elementos no utilizados y se puede destruir en tiempo de ejecución sin ninguna advertencia.
Para poner un objeto ServerSocket en estado de detección, llame al método listen()
. En estado de escucha, el objeto Socket del servidor distribuye eventos connect
cada vez que un cliente intenta conectarse a la dirección y al puerto vinculados utilizando el protocolo TCP. El objeto ServerSocket sigue detectando conexiones adicionaleshasta que se llama al método close()
.
Las conexiones TCP son persistentes: están activas hasta que un extremo de la conexión la cierra (o se produce un fallo de red grave). Todos los datos enviados a través de la conexión se descomponen en paquetes y se reconstruyen en el otro extremo. Se garantiza la recepción de todos los paquetes (dentro de unos límites) y los paquetes perdidos se retransmiten. En general, el protocolo TCP gestiona la banda ancha disponible de la red mejor que el protocolo UDP. Las mayoría de aplicaciones de AIR que requieren comunicaciones de socket deben utilizar las clases ServerSocket y Socket en lugar de la clase DatagramSocket.
La clase ServerSocket 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.
Elementos de API relacionados
Propiedad | Definido por | ||
---|---|---|---|
bound : Boolean [solo lectura]
Indica si este objeto Socket está vinculado a una dirección local y a un puerto. | ServerSocket | ||
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 ServerSocket se admiten en el entorno del motor de ejecución. | ServerSocket | ||
listening : Boolean [solo lectura]
Indica si el socket de servidor detecta conexiones entrantes. | ServerSocket | ||
localAddress : String [solo lectura]
La dirección IP en la que el socket está detectando. | ServerSocket | ||
localPort : int [solo lectura]
El puerto en el que el socket está detectando. | ServerSocket |
Método | Definido por | ||
---|---|---|---|
Crea un objeto ServerSocket. | ServerSocket | ||
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. | ServerSocket | ||
Cierra el socket y detiene la detección de conexiones. | ServerSocket | ||
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 | ||
Inicia la detección de conexiones TCP en la dirección IP y el puerto vinculados. | ServerSocket | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Elimina un detector del objeto EventDispatcher. | EventDispatcher | ||
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. | ServerSocket | |||
Se distribuye cuando un socket remoto busca una conexión a este socket del servidor. | ServerSocket | |||
[evento broadcast] Se distribuye cuando Flash Player o de AIR pasan a estar inactivos. | EventDispatcher |
bound | propiedad |
isSupported | propiedad |
listening | propiedad |
localAddress | propiedad |
localPort | propiedad |
ServerSocket | () | Información sobre |
public function ServerSocket()
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Crea un objeto ServerSocket.
Emite
SecurityError — Este error se produce si el contenido que realiza la llamada se ejecuta fuera del entorno limitado de seguridad de la aplicación de AIR.
|
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.
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 — cuando el socket no se puede vincular, como por ejemplo cuando:
|
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 y detiene la detección de conexiones.
Los sockets cerrados no se pueden volver a abrir. Cree una nueva instancia de ServerSocket en su lugar.
Emite
Error — Este error se produce si el socket no se puede cerrar o si el socket no se ha abierto.
|
listen | () | método |
public function listen(backlog:int = 0):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Inicia la detección de conexiones TCP en la dirección IP y el puerto vinculados.
El método listen()
devuelve inmediatamente. Tras llamar a listen()
, el objeto ServerSocket distribuye un evento connect
siempre que se produce un intento de conexión. La propiedad socket
del objeto de evento ServerSocketConnectEvent hace referencia a un objeto Socket que representa la conexión servidor-cliente.
El parámetro backlog
especifica cuántas conexiones en espera se ponen en cola mientras la aplicación procesa los eventos connect
. Si la cola esté llena, se deniegan conexiones adicionales y no se distribuye ningún evento connect
. Si se especifica el valor predeterminado cero, se utiliza la longitud de cola máxima del sistema. Esta longitud varía en función de la plataforma y puede configurarse cada equipo. Si el valor especificado supera la longitud máxima del sistema, se utiliza la longitud máxima del sistema. No se proporciona ningún modo de saber el valor real del retraso del sistema. (El valor máximo del sistema se determina mediante la configuración de SOMAXCONN en el sistema secundario de la red TCP del equipo host.)
Parámetros
backlog:int (default = 0 ) — La longitud máxima de la cola de conexiones pendientes. Si backlog es 0, la longitud de la cola se establece en el valor máximo del sistema.
|
Emite
IOError — Este error se produce si el socket no está abierto ni vinculado. Este error también ocurre si la llamada a listen() falla por cualquier otro motivo.
| |
RangeError — Este error se produce si el parámetro blacklog es menor que cero.
|
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 ServerSocket. Si otros objetos de la aplicación dependen del evento close
, puede distribuir el evento manualmente antes de llamar al método close()
.
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. |
connect | Evento |
flash.events.ServerSocketConnectEvent
propiedad ServerSocketConnectEvent.type =
flash.events.ServerSocketConnectEvent.CONNECT
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 2 |
Se distribuye cuando un socket remoto busca una conexión a este socket del servidor.
Define el valor de la propiedadtype
de un objeto de evento ServerSocketConnectEvent
Este evento tiene las propiedades siguientes:
Propiedad | Valor |
---|---|
bubbles | false . |
cancelable | false , no hay ningún comportamiento predeterminado que cancelar. |
currentTarget | Este objeto ServerSocket. |
target | Este objeto ServerSocket. |
socket | El objeto Socket que representa la nueva conexión. |
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.events.ProgressEvent; import flash.events.ServerSocketConnectEvent; import flash.net.ServerSocket; import flash.net.Socket; import flash.text.TextField; import flash.text.TextFieldType; import flash.utils.ByteArray; public class ServerSocketExample extends Sprite { private var serverSocket:ServerSocket = new ServerSocket(); private var clientSocket:Socket; private var localIP:TextField; private var localPort:TextField; private var logField:TextField; private var message:TextField; public function ServerSocketExample() { setupUI(); } private function onConnect( event:ServerSocketConnectEvent ):void { clientSocket = event.socket; clientSocket.addEventListener( ProgressEvent.SOCKET_DATA, onClientSocketData ); log( "Connection from " + clientSocket.remoteAddress + ":" + clientSocket.remotePort ); } private function onClientSocketData( event:ProgressEvent ):void { var buffer:ByteArray = new ByteArray(); clientSocket.readBytes( buffer, 0, clientSocket.bytesAvailable ); log( "Received: " + buffer.toString() ); } private function bind( event:Event ):void { if( serverSocket.bound ) { serverSocket.close(); serverSocket = new ServerSocket(); } serverSocket.bind( parseInt( localPort.text ), localIP.text ); serverSocket.addEventListener( ServerSocketConnectEvent.CONNECT, onConnect ); serverSocket.listen(); log( "Bound to: " + serverSocket.localAddress + ":" + serverSocket.localPort ); } private function send( event:Event ):void { try { if( clientSocket != null && clientSocket.connected ) { clientSocket.writeUTFBytes( message.text ); clientSocket.flush(); log( "Sent message to " + clientSocket.remoteAddress + ":" + clientSocket.remotePort ); } else log("No socket connection."); } 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 { localIP = createTextField( 10, 10, "Local IP", "0.0.0.0"); localPort = createTextField( 10, 35, "Local port", "0" ); createTextButton( 170, 60, "Bind", bind ); message = createTextField( 10, 85, "Message", "Lucy can't drink milk." ); createTextButton( 170, 110, "Send", send ); logField = createTextField( 10, 135, "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 = 100; 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