Guida di riferimento di ActionScript® 3.0 per la piattaforma Adobe® Flash®
Home  |  Nascondi elenco pacchetti e classi |  Pacchetti  |  Classi  |  Novità  |  Indice  |  Appendici  |  Perché in inglese?
Filtri: Recupero dati dal server...
Recupero dati dal server...
flash.net 

ServerSocket  - AS3

Pacchettoflash.net
Classepublic class ServerSocket
EreditarietàServerSocket Inheritance EventDispatcher Inheritance Object

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 2

La classe ServerSocket consente al codice di comportarsi come server per le connessioni TCP (Transport Control Protocol).

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à ServerSocket.isSupported. Per ulteriori informazioni sul supporto delle API tra più profili, vedete Supporto dei profili AIR.

Un server TCP intercetta le connessioni in ingresso dai client remoti. Quando un client tenta di connettersi, ServerSocket invia un evento connect. L'oggetto ServerSocketConnectEvent inviato per l'evento fornisce un oggetto Socket che rappresenta la connessione TCP tra il server e il client. Utilizzate questo oggetto Socket per tutte le comunicazioni successive con il client connesso. Potete ottenere l'indirizzo client e la port dall'oggetto Socket, se necessario.

Nota: la vostra applicazione deve gestire un riferimento all'oggetto Socket client. In caso contrario, l'oggetto risulta idoneo per il processo di garbage collection e potrebbe essere distrutto dal runtime senza alcun avviso.

Per attivare lo stato di ascolto di un oggetto ServerSocket, chiamate il metodo listen(). Nello stato di ascolto, l'oggetto socket del server invia eventi connect ogni volta che un client che utilizza il protocollo TCP tenta di connettersi all'indirizzo e alla porta associati. L'oggetto ServerSocket continua a rimanere in ascolto di ulteriori connessioni finché non chiamate il metodo close().

Le connessioni TCP sono persistenti; esistono finché non vengono chiuse da un lato della connessione (oppure si verifica un problema di rete grave). Tutti i dati inviati attraverso la connessione vengono suddivisi in pacchetti trasmissibili e riassemblati all'altra estremità. È garantito (entro limiti ragionevoli) il recapito di tutti i pacchetti e quelli persi vengono ritrasmessi. In generale, il protocollo TCP gestisce l'ampiezza di banda disponibile in rete in modo migliore rispetto al protocollo UDP. Per la maggior parte delle applicazioni AIR che richiedono comunicazioni socket, dovreste utilizzare le classi ServerSocket e Socket anziché la classe DatagramSocket.

La classe ServerSocket 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 .

Vedere gli esempi

Altri esempi

Elementi API correlati



Proprietà pubbliche
 ProprietàDefinito da
      bound : Boolean
[sola lettura] Indica se il socket è associato a un indirizzo e una porta locali.
ServerSocket
 Inheritedconstructor : 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 ServerSocket sono supportate o meno nell'ambiente runtime.
ServerSocket
      listening : Boolean
[sola lettura] Indica se il socket server intercetta le connessioni in entrata.
ServerSocket
      localAddress : String
[sola lettura] L'indirizzo IP sul quale il socket è in ascolto.
ServerSocket
      localPort : int
[sola lettura] La porta sulla quale il socket è in ascolto.
ServerSocket
Metodi pubblici
 MetodoDefinito da
  
    ServerSocket()
Crea un oggetto ServerSocket.
ServerSocket
 Inherited
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
  
    bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
Associa questo socket alla porta e all'indirizzo locale specificati.
ServerSocket
  
    close():void
Chiude il socket e interrompe l'ascolto delle connessioni.
ServerSocket
 Inherited
Invia un evento nel flusso di eventi.
EventDispatcher
 Inherited
Verifica se per l'oggetto EventDispatcher sono presenti listener registrati per un tipo specifico di evento.
EventDispatcher
 Inherited
Indica se per un oggetto è definita una proprietà specifica.
Object
 Inherited
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro.
Object
  
    listen(backlog:int = 0):void
Inizia a intercettare le connessioni TCP sulla porta e sull'indirizzo IP associati.
ServerSocket
 Inherited
Indica se la proprietà specificata esiste ed è enumerabile.
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Rimuove un listener dall'oggetto EventDispatcher.
EventDispatcher
 Inherited
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche.
Object
 Inherited
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate.
Object
 Inherited
Restituisce la rappresentazione in formato stringa dell'oggetto specificato.
Object
 Inherited
Restituisce il valore di base dell'oggetto specificato.
Object
 Inherited
Verifica se un listener di eventi è registrato con questo oggetto EventDispatcher o qualsiasi suo antenato per il tipo di evento specificato.
EventDispatcher
Eventi
 Evento Riepilogo Definito da
 Inherited[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
  
    close
Inviato quando il sistema operativo chiude questo socket.ServerSocket
  
    connect
Inviato quando un socket remoto tenta di connettersi a questo socket server.ServerSocket
 Inherited[evento di trasmissione] Inviato quando Flash Player o l'applicazione AIR perde l'attivazione del sistema operativo e sta entrando nello stato inattivo.EventDispatcher
Descrizione delle proprietà
    

bound

proprietà
bound:Boolean  [sola lettura]

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 2

Indica se il socket è associato a un indirizzo e una porta locali.



Implementazione
    public function get bound():Boolean

Elementi API correlati

    

isSupported

proprietà 
isSupported:Boolean  [sola lettura]

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 2

Indica se le funzioni ServerSocket sono supportate o meno nell'ambiente runtime.



Implementazione
    public static function get isSupported():Boolean
    

listening

proprietà 
listening:Boolean  [sola lettura]

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 2

Indica se il socket server intercetta le connessioni in entrata.



Implementazione
    public function get listening():Boolean

Elementi API correlati

    

localAddress

proprietà 
localAddress:String  [sola lettura]

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 2

L'indirizzo IP sul quale il socket è in ascolto.



Implementazione
    public function get localAddress():String

Elementi API correlati

    

localPort

proprietà 
localPort:int  [sola lettura]

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 2

La porta sulla quale il socket è in ascolto.



Implementazione
    public function get localPort():int

Elementi API correlati

Descrizione della funzione di costruzione
    

ServerSocket

()Funzione di costruzione
public function ServerSocket()

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 2

Crea un oggetto ServerSocket.


Genera
SecurityError — Questo errore si verifica se il contenuto chiamante viene eseguito al di fuori della sandbox di sicurezza dell'applicazione AIR.
Descrizione dei metodi

    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.

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 — Quando il socket non può essere associato, ad esempio quando:
  • Il socket di rete sottostante (IP e porta) è già associato da un altro oggetto o processo.
  • L'applicazione viene eseguita da un account utente che non dispone dei privilegi necessari per associare la porta. I problemi relativi ai privilegi solitamente si verificano quando si tenta di effettuare l'associazione con porte ben note (localPort < 1024)
  • Questo oggetto ServerSocket è già associato. (Chiamate close() prima di effettuare l'associazione con un socket differente.)
  • Quando localAddress non è un indirizzo locale valido.

    close

()metodo 
public function close():void

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 2

Chiude il socket e interrompe l'ascolto delle connessioni.

I socket chiusi non possono essere riaperti. Create invece una nuova istanza ServerSocket.


Genera
Error — Questo errore si verifica se non è stato possibile chiudere il socket oppure il socket non è stato aperto.

    listen

()metodo 
public function listen(backlog:int = 0):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 2

Inizia a intercettare le connessioni TCP sulla porta e sull'indirizzo IP associati.

Il metodo listen() restituisce immediatamente un valore. Una volta chiamato listen(), l'oggetto ServerSocket invia un evento connect a ogni tentativo di connessione. La proprietà socket dell'oggetto evento ServerSocketConnectEvent fa riferimento a un oggetto Socket che rappresenta la connessione server-client.

Il parametro backlog specifica quante connessioni in attesa vengono inserite nella coda mentre gli eventi connect vengono elaborati dall'applicazione. Se la coda è piena, le eventuali connessioni aggiuntive vengono rifiutate senza l'invio di un evento connect. Se viene specificato il valore predefinito zero, viene usata la massima lunghezza della coda supportata dal sistema. Questa lunghezza varia in base alla piattaforma e può essere configurata per ogni computer. Se il valore specificato supera la lunghezza massima di sistema, verrà utilizzato quest'ultimo valore. Non viene fornito alcun metodo per rilevare il valore di backlog effettivo. (Il valore massimo di sistema è determinato dall'impostazione SOMAXCONN del sottosistema di rete TCP sul computer host).

Parametri

backlog:int (default = 0) — La lunghezza massima della coda delle connessioni in attesa. Se backlog è 0, è impostata sul valore massimo del sistema.


Genera
IOError — Questo errore si verifica se il socket non è aperto o associato. Si verifica anche se la chiamata a listen() fallisce per qualunque altro motivo.
 
RangeError — Questo errore si verifica se il parametro backlog è inferiore a zero.
Descrizione degli eventi
    

close

Evento
Tipo di oggetto 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 ServerSocket close(). Se altri oggetti nell'applicazione si basano sull'evento close, potete inviare l'evento manualmente prima di chiamare il metodo close().

La costante Event.CLOSE definisce il valore della proprietà type di un oggetto evento close.

Questo evento ha le seguenti proprietà:

ProprietàValore
bubblesfalse
cancelablefalse; non è presente alcun comportamento predefinito da annullare.
currentTargetL'oggetto che elabora attivamente l'oggetto Event con un listener di eventi.
targetL'oggetto la cui connessione è stata chiusa.
    

connect

Evento  
Tipo di oggetto evento: flash.events.ServerSocketConnectEvent
proprietà ServerSocketConnectEvent.type = flash.events.ServerSocketConnectEvent.CONNECT

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 2

Inviato quando un socket remoto tenta di connettersi a questo socket server.

Definisce il valore della proprietà type di un oggetto evento ServerSocketConnectEvent.

Questo evento ha le seguenti proprietà:

ProprietàValore
bubblesfalse.
cancelablefalse; non è presente alcun comportamento predefinito da annullare.
currentTargetQuesto oggetto ServerSocket.
targetQuesto oggetto ServerSocket.
socketL'oggetto Socket che rappresenta la nuova connessione.
ServerSocketExample.as

Nell'esempio seguente viene creato un server socket: Per utilizzare il server, associate il socket a una porta locale, quindi connettete tale porta da un'altra applicazione. Il server è in grado di interpretare solo stringhe UTF-8.
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;
        }        
    }
}




[ X ]Perché in inglese?
Il contenuto della Guida di riferimento di ActionScript 3.0 appare in inglese

Non tutte le parti della Guida di riferimento di ActionScript 3.0 sono tradotte in tutte le lingue. Quando un elemento del linguaggio non è tradotto, viene riportato in inglese. Ad esempio, la classe ga.controls.HelpBox non è tradotta in nessuna lingua. Pertanto, nella versione italiana della guida di riferimento, la descrizione della classe ga.controls.HelpBox è riportata in inglese.