Paket | flash.net |
Klasse | public class ServerSocket |
Vererbung | ServerSocket EventDispatcher Object |
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Unterstützung von AIR-Profilen: Diese Funktion wird auf allen Desktopbetriebssystemen, unter IOS (beginnend mit AIR 3.8) und unter Android unterstützt (beginnend mit AIR 3.8). Bei Geräten mit AIR für TV wird diese Funktion nicht unterstützt. Mit der ServerSocket.isSupported
-Eigenschaft können Sie testen, ob zur Laufzeit Unterstützung gegeben ist. Weitere Informationen zum API-Support über mehrere Profile finden Sie unter Unterstützung von AIR-Profilen.
Ein TCP-Server wartet auf ankommende Verbindungen von Remoteclients. Wenn ein Client versucht, eine Verbindung herzustellen, setzt ServerSocket ein connect
-Ereignis ab. Das ServerSocketConnectEvent -Objekt, das für das Ereignis abgesetzt wurde, stellt ein Socket-Objekt bereit, das die TCP-Verbindung zwischen dem Server und dem Client repräsentiert. Verwenden Sie dieses Socket-Objekt für die nachfolgende Kommunikation mit dem verbundenen Client. Sie können die Clientadresse und den Port ggf. vom Socket-Objekt beziehen.
Hinweis: Beachten Sie, dass Ihre Anwendung dafür zuständig ist, einen Verweis auf das Client-Socket-Objekt zu verwalten. Andernfalls wird dieses Objekt bei der Speicherbereinigung (Garbage Collection) berücksichtig und kann zur Laufzeit ohne Warnung gelöscht werden.
Um ein ServerSocket-Objekt in den wartenden Zustand zu versetzen, rufen Sie die listen()
-Methode auf. Im wartenden Zustand setzt das ServerSocket-Objekt connect
-Ereignisse ab, wenn ein Client, der TCP verwendet, versucht, eine Verbindung zu der gebundenen Adresse und dem Port herzustellen. Das ServerSocket-Objekt wartet auf weitere Verbindungen, bis Sie die close()
-Methode aufrufen.
TCP-Verbindungen sind beständig – sie sind vorhanden, bis eine Seite der Verbindung diese schließt (oder bis ein schwerwiegender Netzwerkfehler auftritt). Alle Daten, die über die Verbindung gesendet werden, werden in übertragbare Pakete zerlegt und am anderen Ende wieder zusammengesetzt. Alle Pakete kommen garantiert (in Grenzen) an; verloren gegangene Pakete werden erneut übertragen. Im Allgemeinen verwaltet das TCP-Protokoll die verfügbare Netzwerkbandbreite besser als das UDP-Protokoll. Die meisten AIR-Anwendungen, die Socketkommunikation benötigen, sollten eher die ServerSocket- und die Socket-Klasse verwenden als die DatagramSocket-Klasse.
Die ServerSocket-Klasse kann nur in Adobe AIR-Anwendungen und nur in der Sicherheitssandbox der Anwendung verwendet werden.
Weitere Informationen zum Thema Sicherheit finden Sie im Flash Player Developer Center im Abschnitt Sicherheit.
Verwandte API-Elemente
Eigenschaft | Definiert von | ||
---|---|---|---|
bound : Boolean [schreibgeschützt]
Gibt an, ob der Socket an eine lokale Adresse und einen Port gebunden ist. | ServerSocket | ||
constructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz. | Object | ||
isSupported : Boolean [statisch] [schreibgeschützt]
Gibt an, ob ServerSocket-Funktionen in der Laufzeitumgebung unterstützt werden. | ServerSocket | ||
listening : Boolean [schreibgeschützt]
Gibt an, ob der Serversocket auf ankommende Verbindungen wartet. | ServerSocket | ||
localAddress : String [schreibgeschützt]
Die IP-Adresse, die der Socket überwacht. | ServerSocket | ||
localPort : int [schreibgeschützt]
Der Port, den der Socket überwacht. | ServerSocket |
Methode | Definiert von | ||
---|---|---|---|
Erstellt ein ServerSocket-Objekt. | ServerSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registriert ein Ereignis-Listener-Objekt bei einem EventDispatcher-Objekt, sodass der Listener über ein Ereignis benachrichtigt wird. | EventDispatcher | ||
Bindet diesen Socket an die angegebene lokale Adresse und den angegebenen Port. | ServerSocket | ||
Schließt den Socket und beendet die Überwachung von Verbindungen. | ServerSocket | ||
Sendet ein Ereignis in den Ereignisablauf. | EventDispatcher | ||
Überprüft, ob das EventDispatcher-Objekt Listener für einen bestimmten Ereignistyp registriert hat. | EventDispatcher | ||
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde. | Object | ||
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde. | Object | ||
Leitet die Überwachung von TCP-Verbindungen an der gebundenen IP-Adresse und am Port ein. | ServerSocket | ||
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. | Object | ||
Entfernt einen Listener aus dem EventDispatcher-Objekt. | EventDispatcher | ||
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest. | Object | ||
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas. | Object | ||
Gibt das angegebene Objekt als String zurück. | Object | ||
Gibt den Grundwert des angegebenen Objekts zurück. | Object | ||
Überprüft, ob bei diesem EventDispatcher-Objekt oder bei einem seiner Vorgänger ein Ereignis-Listener für einen bestimmten Ereignistyp registriert ist. | EventDispatcher |
Ereignis | Übersicht | Definiert von | ||
---|---|---|---|---|
[broadcast event] Wird ausgelöst, wenn Flash Player oder eine AIR-Anwendung den Betriebssystemfokus erhält und aktiv wird. | EventDispatcher | |||
Wird abgesetzt, wenn das Betriebssystem diesen Socket schließt. | ServerSocket | |||
Wird abgesetzt, wenn ein Remotesocket versucht, eine Verbindung zu diesem Serversocket herzustellen. | ServerSocket | |||
[broadcast event] Wird ausgelöst, wenn Flash Player- oder die AIR-Anwendung den Fokus verliert und inaktiv wird. | EventDispatcher |
bound | Eigenschaft |
isSupported | Eigenschaft |
listening | Eigenschaft |
localAddress | Eigenschaft |
localPort | Eigenschaft |
ServerSocket | () | Konstruktor |
public function ServerSocket()
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Erstellt ein ServerSocket-Objekt.
Auslöser
SecurityError — Dieser Fehler tritt auf, wenn der aufrufende Inhalt außerhalb der Sicherheitssandbox der AIR-Anwendung ausgeführt wird.
|
bind | () | Methode |
public function bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Bindet diesen Socket an die angegebene lokale Adresse und den angegebenen Port.
Parameter
localPort:int (default = 0 ) — Die Nummer des Ports, zu dem auf dem lokalen Computer eine Bindung hergestellt werden soll. Wenn localPort auf 0 (Standardeinstellung) gesetzt ist, wird der nächste verfügbare Systemport gebunden. Die Berechtigung für die Verbindung mit einer Portnummer unter 1024 wird von der Sicherheitsrichtlinie des Systems geregelt. Bei Mac- und Linux-Systemen muss die Anwendung zum Beispiel mit Root-Berechtigung ausgeführt werden, damit Verbindungen zu Ports unter 1024 hergestellt werden können.
| |
localAddress:String (default = "0.0.0.0 ") — Die IP-Adresse auf dem lokalen Computer, zu der eine Bindung hergestellt werden soll. Diese Adresse kann eine IPv4- oder IPv6-Adresse sein. Wenn localAddress auf 0.0.0.0 (die Standardeinstellung) gesetzt ist, wartet der Socket an allen verfügbaren IPv4-Adressen. Um an allen verfügbaren IPv6-Adressen zu warten, müssen Sie "::" als localAddress -Argument angeben. Um eine IPv6-Adresse zu verwenden, müssen der Computer und das Netzwerk so konfiguriert sein, dass sie IPv6 unterstützen. Ein an eine IPv4-Adresse gebundener Socket kann keine Verbindung zu einem Socket mit einer IPv6-Adresse herstellen. Entsprechend kann ein an eine IPv6-Adresse gebundener Socket keine Verbindung zu einem Socket mit einer IPv4-Adresse herstellen. Der Adresstyp muss übereinstimmen.
|
Auslöser
RangeError — Dieser Fehler tritt auf, wenn localPort kleiner als 0 oder größer als 65535 ist.
| |
ArgumentError — Dieser Fehler tritt auf, wenn localAddress keine syntaktisch gut strukturierte Adresse ist.
| |
IOError — wenn der Socket nicht gebunden werden kann, zum Beispiel:
|
close | () | Methode |
public function close():void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Schließt den Socket und beendet die Überwachung von Verbindungen.
Geschlossene Sockets können nicht erneut geöffnet werden. Erstellen Sie stattdessen eine neue ServerSocket-Instanz.
Auslöser
Error — Dieser Fehler tritt auf, wenn der Socket nicht geschlossen werden konnte oder der Socket nicht geöffnet war.
|
listen | () | Methode |
public function listen(backlog:int = 0):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Leitet die Überwachung von TCP-Verbindungen an der gebundenen IP-Adresse und am Port ein.
Die listen()
-Methode gibt sofort einen Wert zurück. Nachdem Sie listen()
aufgerufen haben, setzt das ServerSocket-Objekt jedes Mal ein connect
-Ereignis ab, wenn versucht wird, eine Verbindung herzustellen. Die socket
-Eigenschaft des ServerSocketConnectEvent-Ereignisobjekts verweist auf ein Socket-Objekt, das die Server-Client-Verbindung repräsentiert.
Der backlog
-Parameter gibt an, wie viele ausstehende Verbindungen sich in der Warteschlange befinden, während die connect
-Ereignisse von Ihrer Anwendung verarbeitet werden. Wenn die Warteschlange voll ist, werden weitere Verbindungen abgelehnt, ohne dass ein connect
-Ereignis abgesetzt wird. Wenn der Standardwert null angegeben wird, wird der Systemhöchstwert für die Länge der Warteschlange verwendet. Diese Länge variiert je nach Plattform und kann auf dem Computer konfiguriert werden. Wenn der angegebene Wert den Systemhöchstwert übersteigt, wird stattdessen der Systemhöchstwert für die Länge verwendet. Es werden keine Mittel zum Erkennen des tatsächlichen Backlogwerts bereitgestellt. (Der Systemhöchstwert wird von der SOMAXCONN-Einstellung des TCP-Netzwerksystems auf dem Hostcomputer bestimmt.)
Parameter
backlog:int (default = 0 ) — Die maximale Länge der Warteschlange mit ausstehenden Verbindungen. Wenn backlog den Wert 0 hat, wird die Warteschlangenlänge auf den Systemhöchstwert gesetzt.
|
Auslöser
IOError — Dieser Fehler tritt auf, wenn der Socket nicht geöffnet oder gebunden ist. Dieser Fehler tritt auch auf, wenn der Aufruf von listen() aus einem anderen Grund fehlschlägt.
| |
RangeError — Dieser Fehler tritt auf, wenn der backlog -Parameter kleiner als null ist.
|
close | Ereignis |
flash.events.Event
Eigenschaft Event.type =
flash.events.Event.CLOSE
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Wird abgesetzt, wenn das Betriebssystem diesen Socket schließt.
Das close
-Ereignis wird nicht abgesetzt, wenn die close()
-Methode von ServerSocket aufgerufen wird. Wenn andere Objekte in Ihrer Anwendung auf das close
-Ereignis angewiesen sind, können Sie das Ereignis manuell absetzen, bevor Sie die close()
-Methode aufrufen.
Event.CLOSE
-Konstante definiert den Wert der type
-Eigenschaft eines close
-Ereignisobjekts.
Dieses Ereignis verfügt über die folgenden Eigenschaften:
Eigenschaft | Wert |
---|---|
bubbles | false |
cancelable | false . Es gibt kein Standardverhalten, das abgebrochen werden kann. |
currentTarget | Das Objekt, welches das Ereignisobjekt aktiv mit einem Ereignis-Listener verarbeitet. |
target | Das Objekt, dessen Verbindung geschlossen wurde. |
connect | Ereignis |
flash.events.ServerSocketConnectEvent
Eigenschaft ServerSocketConnectEvent.type =
flash.events.ServerSocketConnectEvent.CONNECT
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Wird abgesetzt, wenn ein Remotesocket versucht, eine Verbindung zu diesem Serversocket herzustellen.
Definiert den Wert dertype
-Eigenschaft eines ServerSocketConnectEvent
-Ereignisobjekts.
Dieses Ereignis verfügt über die folgenden Eigenschaften:
Eigenschaft | Wert |
---|---|
bubbles | false . |
cancelable | false , es gibt kein Standardverhalten, das abgebrochen werden kann. |
currentTarget | Dieses ServerSocket-Objekt. |
target | Dieses ServerSocket-Objekt. |
socket | Das Socket-Objekt, das die neue Verbindung darstellt. |
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, 10:04 AM Z