Pacchetto | flash.net |
Classe | public class ServerSocket |
Ereditarietà | ServerSocket 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à 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 .
Altri esempi
Elementi API correlati
Proprietà | Definito da | ||
---|---|---|---|
bound : Boolean [sola lettura]
Indica se il socket è associato a un indirizzo e una porta locali. | ServerSocket | ||
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 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 |
Metodo | Definito da | ||
---|---|---|---|
Crea un oggetto ServerSocket. | ServerSocket | ||
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. | ServerSocket | ||
Chiude il socket e interrompe l'ascolto delle connessioni. | ServerSocket | ||
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 | ||
Inizia a intercettare le connessioni TCP sulla porta e sull'indirizzo IP associati. | ServerSocket | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Rimuove un listener dall'oggetto EventDispatcher. | EventDispatcher | ||
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. | ServerSocket | |||
Inviato quando un socket remoto tenta di connettersi a questo socket server. | ServerSocket | |||
[evento di trasmissione] Inviato quando Flash Player o l'applicazione AIR perde l'attivazione del sistema operativo e sta entrando nello stato inattivo. | EventDispatcher |
bound | proprietà |
isSupported | proprietà |
listening | proprietà |
localAddress | proprietà |
localPort | proprietà |
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.
|
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:
|
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.
|
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 ServerSocket close()
. Se altri oggetti nell'applicazione si basano sull'evento close
, potete inviare l'evento manualmente prima di chiamare il metodo 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. |
connect | 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 |
---|---|
bubbles | false . |
cancelable | false ; non è presente alcun comportamento predefinito da annullare. |
currentTarget | Questo oggetto ServerSocket. |
target | Questo oggetto ServerSocket. |
socket | L'oggetto Socket che rappresenta la nuova connessione. |
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:44 PM Z