Paket | flash.net |
Klasse | public class DatagramSocket |
Vererbung | DatagramSocket 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 DatagramSocket.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.
Datagram-Pakete werden einzeln zwischen Quelle und Ziel übertragen. Pakete kommen nicht unbedingt in der Reihenfolge an, in der sie gesendet wurden. Pakete, die bei der Übertragung verloren gehen, werden nicht erneut übertragen oder erkannt.
Daten, die unter Verwendung eines Datagram-Sockets gesendet werden, werden nicht automatisch in Pakete übertragbarer Größe zerlegt. Wenn Sie ein UDP-Paket senden, das die Größe der maximalen Übertragungseinheit (maximum transmission unit, MTU) überschreitet, wird das Paket (ohne Warnung) verworfen. Die beschränkende MTU ist die kleinste MTU der am Übertragungsweg beteiligten Schnittstellen, Switches oder Router. Mithilfe der NetworkInterface-Klasse können Sie die MTU der lokalen Schnittstelle bestimmen, andere Knoten im Netzwerk können jedoch andere MTU-Werte aufweisen.
Die Socket-Klasse verwendet TCP, welches garantierte Paketzustellung bietet und große Pakete automatisch zerlegt und wieder zusammensetzt. TCP ermöglicht auch eine bessere Verwaltung der Netzwerkbandbreite. Diese Merkmale bedeuten, dass Daten, die mittels TCP-Socket gesendet werden, zwar eine höhere Latenzzeit haben; die Vorteile von TCP wiegen in den meisten Fällen jedoch weit mehr als die höheren Kosten. Meistens sollte in der Netzwerkkommunikation die Socket-Klasse anstatt der DatagramSocket-Klasse verwendet werden.
Die DatagramSocket-Klasse ist hilfreich bei der Arbeit mit Anwendungen, bei denen eine kurze Übertragungsverzögerung wichtig ist und Paketverluste tolerierbar sind. Netzwerkvorgänge in VoIP-Anwendungen und Echtzeit-Multiplayer-Spielen können zum Beispiel häufig von UDP profitieren. Die DatagramSocket-Klasse eignet sich auch für bestimmte serverseitige Anwendungen. Da UDP ein verbindungsloses Protokoll ist, kann ein Server mehr Anfragen von mehr Clients verarbeiten als dies bei TCP der Fall ist.
Die DatagramSocket-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.
Weitere Informationen
Verwandte API-Elemente
Eigenschaft | Definiert von | ||
---|---|---|---|
bound : Boolean [schreibgeschützt]
Gibt an, ob dieses Socketobjekt zurzeit an eine lokale Adresse und einen Port gebunden ist. | DatagramSocket | ||
connected : Boolean [schreibgeschützt]
Gibt an, ob dieses Socketobjekt zurzeit mit einer Remoteadresse und einem Port verbunden ist. | DatagramSocket | ||
constructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz. | Object | ||
isSupported : Boolean [statisch] [schreibgeschützt]
Gibt an, ob DatagramSocket-Funktionen in der Laufzeitumgebung unterstützt werden. | DatagramSocket | ||
localAddress : String [schreibgeschützt]
Die IP-Adresse, an die dieser Socket auf dem lokalen Computer gebunden ist. | DatagramSocket | ||
localPort : int [schreibgeschützt]
Der Port, an den dieser Socket auf dem lokalen Computer gebunden ist. | DatagramSocket | ||
remoteAddress : String [schreibgeschützt]
Die IP-Adresse des Remotecomputers, mit der dieser Socket verbunden ist. | DatagramSocket | ||
remotePort : int [schreibgeschützt]
Der Port des Remotecomputers, mit dem dieser Socket verbunden ist. | DatagramSocket |
Methode | Definiert von | ||
---|---|---|---|
Erstellt ein DatagramSocket-Objekt. | DatagramSocket | ||
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. | DatagramSocket | ||
Schließt den Socket. | DatagramSocket | ||
Verbindet den Socket mit einer angegebenen Remoteadresse und einem angegebenen Port. | DatagramSocket | ||
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 | ||
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. | Object | ||
Ermöglicht diesem DatagramSocket-Objekt, ankommende Pakete an der gebundenen IP-Adresse und Port zu empfangen. | DatagramSocket | ||
Entfernt einen Listener aus dem EventDispatcher-Objekt. | EventDispatcher | ||
Sendet ein Paket mit den Bytes im ByteArray über UDP. | DatagramSocket | ||
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. | DatagramSocket | |||
Wird abgesetzt, wenn dieser Socket ein Datenpaket empfängt. | DatagramSocket | |||
[broadcast event] Wird ausgelöst, wenn Flash Player- oder die AIR-Anwendung den Fokus verliert und inaktiv wird. | EventDispatcher | |||
Wird abgesetzt, wenn dieser Socket einen E/A-Fehler empfängt. | DatagramSocket |
bound | Eigenschaft |
connected | Eigenschaft |
connected:Boolean
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Gibt an, ob dieses Socketobjekt zurzeit mit einer Remoteadresse und einem Port verbunden ist.
Hinweis: Der Wert true
bedeutet nicht, dass ein Remotecomputer an der verbundenen Adresse und dem Port wartet. Er gibt lediglich an, dass dieses DataGramSocket-Objekt nur an diese Adresse und diesen Port Daten sendet bzw. von dort empfängt.
Implementierung
public function get connected():Boolean
Verwandte API-Elemente
isSupported | Eigenschaft |
localAddress | Eigenschaft |
localPort | Eigenschaft |
remoteAddress | Eigenschaft |
remotePort | Eigenschaft |
DatagramSocket | () | Konstruktor |
public function DatagramSocket()
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Erstellt ein DatagramSocket-Objekt.
Auslöser
SecurityError — wenn Inhalt außerhalb der Sicherheitssandbox der AIR-Anwendung versucht, ein DatagramSocket-Objekt zu erstellen.
|
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.
Die bind()
-Methode wird synchron ausgeführt. Der Bindungsvorgang wird abgeschlossen, bevor die nächste Codezeile ausgeführt wird.
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 — Dieser Fehler tritt auf, wenn der Socket nicht gebunden werden kann, zum Beispiel wenn:
| |
Error — Dieser Fehler tritt auf, wenn localAddress keine gültige lokale Adresse ist.
|
Beispiel ( Verwendung dieses Beispiels )
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 | () | Methode |
public function close():void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Schließt den Socket.
Der Socket wird vom Remotecomputer getrennt und die Bindung mit dem lokalen Computer wird aufgehoben. Ein geschlossener Socket kann nicht wiederverwendet werden.
Auslöser
IOError — Wenn der Socket nicht geschlossen werden kann (wegen eines internen, Netzwerk- oder Betriebssystemfehlers) oder wenn der Socket nicht geöffnet ist.
|
connect | () | Methode |
public function connect(remoteAddress:String, remotePort:int):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Verbindet den Socket mit einer angegebenen Remoteadresse und einem angegebenen Port.
Wenn ein Datagram-Socket „verbunden“ ist, können Datagram-Pakete nur an das angegebene Ziel gesendet bzw. von diesem empfangen werden. Pakete von anderen Quellen werden ignoriert. Die Verbindung mit einem Datagram-Socket ist nicht erforderlich. Durch das Herstellen einer Verbindung kann die Notwendigkeit, fremde Pakete von anderen Quellen herauszufiltern, entfallen. Eine UDP-Socketverbindung ist jedoch keine beständige Netzwerkverbindung (wie dies bei einer TCP-Verbindung der Fall ist). Es ist sogar möglich, dass das Remote-Ende des Sockets gar nicht vorhanden ist.
Wenn die bind()
-Methode nicht aufgerufen wurde, wird der Socket automatisch an die Standardadresse und den Standardport gebunden.
Parameter
remoteAddress:String — Die IP-Adresse des Remotecomputers, zu dem eine Verbindung hergestellt werden soll. Diese Adresse kann eine IPv4- oder IPv6-Adresse sein. Wenn bind() nicht aufgerufen wurde, wird die Adressfamilie der remoteAddress , IPv4 oder IPv6, beim Aufruf des Standard-bind() verwendet.
| |
remotePort:int — Die zur Herstellung einer Verbindung verwendete Portnummer auf dem Remotecomputer.
|
Auslöser
RangeError — Dieser Fehler tritt auf, wenn localPort kleiner als 1 oder größer als 65535 ist.
| |
ArgumentError — Dieser Fehler tritt auf, wenn localAddress keine syntaktisch gültige Adresse ist. Oder wenn eine Standard-Route-Adresse ('0.0.0.0' oder '::') verwendet wird.
| |
IOError — Dieser Fehler tritt auf, wenn der Socket nicht verbunden werden kann, zum Beispiel wenn bind() nicht vor dem Aufruf von connect() aufgerufen wurde und die Standardbindung an die Remote-Adressfamilie nicht möglich ist.
|
receive | () | Methode |
public function receive():void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Ermöglicht diesem DatagramSocket-Objekt, ankommende Pakete an der gebundenen IP-Adresse und Port zu empfangen.
Die Funktion liefert sofort eine Rückgabe. Das DatagramSocket-Objekt setzt ein data
-Ereignis ab, wenn ein Paket empfangen wird.
Ereignisse
data: — wenn ein UDP-Paket empfangen wird.
|
send | () | Methode |
public function send(bytes:ByteArray, offset:uint = 0, length:uint = 0, address:String = null, port:int = 0):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Sendet ein Paket mit den Bytes im ByteArray über UDP.
Wenn eine Verbindung zum Socket hergestellt wurde, wird das Paket an die Remoteadresse und den Port gesendet, die in der connect()
-Methode angegeben wurden, und Ziel-IP-Adresse und Port können nicht festgelegt werden. Wenn keine Verbindung zum Socket hergestellt wurde, wird das Paket an die angegebene Adresse und den angegebenen Port gesendet und Sie müssen gültige Werte für address
und port
angeben. Wenn die bind()
-Methode nicht aufgerufen wurde, wird der Socket automatisch an die Standardadresse und den Standardport gebunden.
Hinweis: Das Senden von Daten an eine Broadcastadresse wird nicht unterstützt.
Parameter
bytes:ByteArray — ein ByteArray, der die Paketdaten enthält.
| |
offset:uint (default = 0 ) — Der auf null basierende Offset im bytes -ByteArray-Objekt, bei dem das Paket anfängt.
| |
length:uint (default = 0 ) — Die Anzahl der Byte im Paket. Beim Standardwert 0 wird der gesamte ByteArray ab dem durch den Parameter offset angegebenen Wert gesendet.
| |
address:String (default = null ) — Die IPv4- oder IPv6-Adresse des Remotecomputers. Eine Adresse ist erforderlich, falls noch keine mit der connect() -Methode angegeben wurde.
| |
port:int (default = 0 ) — Die Portnummer auf dem Remotecomputer. Ein Wert größer als 0 und kleiner als 65536 ist erforderlich, wenn der Port nicht bereits mit der connect() -Methode angegeben wurde.
|
Auslöser
RangeError — Dieser Fehler tritt auf, wenn port kleiner als 1 oder größer als 65535 ist.
| |
ArgumentError — Wenn der Socket nicht verbunden und address keine korrekte IP-Adresse ist.
| |
IOError — Dieser Fehler tritt auf:
| |
Error — wenn der bytes -Parameter den Wert null hat.
| |
RangeError — Wenn offset größer als die Länge des ByteArray wie in bytes angegeben ist, oder wenn die Menge der zu schreibenden Daten wie in offset plus length angegeben die verfügbaren Daten überschreitet.
| |
IllegalOperationError — Wenn die Parameter address oder port angegeben werden, wenn bereits eine Verbindung zum Socket besteht.
|
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 DatagramSocket aufgerufen wird.
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. |
data | Ereignis |
flash.events.DatagramSocketDataEvent
Eigenschaft DatagramSocketDataEvent.type =
flash.events.DatagramSocketDataEvent.DATA
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2 |
Wird abgesetzt, wenn dieser Socket ein Datenpaket empfängt.
Definiert den Wert der Eigenschafttype
eines data
-Ereignisobjekts.
ioError | Ereignis |
flash.events.IOErrorEvent
Eigenschaft IOErrorEvent.type =
flash.events.IOErrorEvent.IOERROR
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 2.5 |
Wird abgesetzt, wenn dieser Socket einen E/A-Fehler empfängt.
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, 10:04 AM Z