Package | flash.net |
Classe | public class DatagramSocket |
Héritage | DatagramSocket EventDispatcher Object |
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 2 |
Prise en charge du profil AIR : cette fonctionnalité est prise en charge sur tous les systèmes d’exploitation de bureau, sur iOS (à partir d’AIR 3.8 ) et sur Android (à partir d’AIR 3.8 ). Cette fonctionnalité n’est pas prise en charge sur les périphériques AIR pour TV. Vous pouvez tester la prise en charge lors de l’exécution à l’aide de la propriété DatagramSocket.isSupported
. Voir Prise en charge du profil AIR pour plus d’informations sur la prise en charge de l’API dans plusieurs profils.
Les paquets de datagrammes sont transmis individuellement entre la source et la destination. Il est possible que les paquets ne soient pas reçus dans l’ordre dans lequel ils ont été envoyés. Les paquets perdus lors de la transmission ne sont pas retransmis ; il est même possible qu’ils ne soient pas détectés.
Les données envoyées à l’aide d’un socket datagramme ne sont pas automatiquement divisées en paquets de taille transmissible. Si vous envoyez un paquet UDP qui dépasse la taille de l’unité maximale de transmission, le réseau refuse le paquet (sans avertissement). L’UTM limite correspond à la plus petite UTM d’une interface, d’un commutateur ou d’un router dans le chemin de transmission. Vous pouvez utiliser la classe NetworkInterface pour déterminer l’UTM de l’interface locale, bien que d’autres nœuds dans le réseau puissent avoir différentes valeurs d’UTM.
La classe Socket utilise TCP, qui permet de garantir la livraison des paquets, ainsi que de diviser automatiquement et de reconstituer les paquets volumineux. TCP offre également une meilleure gestion de la bande passante du réseau. Ces fonctionnalités signifient que les données envoyées à l’aide d’un socket TCP impliquent un temps d’attente plus long, mais pour la plupart des utilisateurs, les avantages du protocole TCP compensent les coûts. La plupart des communications réseau doivent utiliser la classe Socket plutôt que la classe DatagramSocket.
La classe DatagramSocket est utile lors de l’utilisation d’applications qui offrent un faible temps d’attente de transmission et qui tolèrent la perte de paquets. Par exemple, les opérations de réseau dans des applications VoIP (voix sur IP) et en temps réel, telles que les jeux multijoueurs, peuvent tirer profit du protocole UDP. La classe DatagramSocket est également utile pour certaines applications côté serveur. Etant donné que le protocole UDP est sans état, un serveur peut traiter davantage de requêtes provenant de plusieurs clients que s’il utilisait le protocole TCP.
La classe DatagramSocket ne peut être utilisée dans les applications d’Adobe AIR et uniquement dans le sandbox de sécurité de l’application.
Pour plus d’informations concernant la sécurité, voir la rubrique du Pôle de développement Flash Player : Sécurité (disponible en anglais uniquement).
Plus d’exemples
Informations complémentaires
Eléments de l’API associés
Propriété | Défini par | ||
---|---|---|---|
bound : Boolean [lecture seule]
Indique si cet objet socket est actuellement lié à une adresse et à un port locaux. | DatagramSocket | ||
connected : Boolean [lecture seule]
Indique si cet objet socket est actuellement connecté à une adresse et à un port distants. | DatagramSocket | ||
constructor : Object
Référence à l’objet de classe ou à la fonction constructeur d’une occurrence donnée d’un objet. | Object | ||
isSupported : Boolean [statique] [lecture seule]
Indique si les fonctions DatagramSocket sont prises en charge dans l’environnement d’exécution. | DatagramSocket | ||
localAddress : String [lecture seule]
Adresse IP à laquelle ce socket est lié sur la machine locale. | DatagramSocket | ||
localPort : int [lecture seule]
Port auquel ce socket est lié sur la machine locale. | DatagramSocket | ||
remoteAddress : String [lecture seule]
Adresse IP de la machine distante à laquelle ce socket est connecté. | DatagramSocket | ||
remotePort : int [lecture seule]
Port de la machine distante auquel ce socket est connecté. | DatagramSocket |
Méthode | Défini par | ||
---|---|---|---|
Crée un objet DatagramSocket. | DatagramSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Enregistre un objet écouteur d’événement auprès d’un objet EventDispatcher afin que l’écouteur soit averti d’un événement. | EventDispatcher | ||
Lie ce socket à l’adresse et au port locaux spécifiés. | DatagramSocket | ||
Ferme le socket. | DatagramSocket | ||
Connecte le socket à une adresse et un port distants spécifiés. | DatagramSocket | ||
Distribue un événement dans le flux d’événements. | EventDispatcher | ||
Vérifie si des écouteurs sont enregistrés auprès de l’objet EventDispatcher pour un type spécifique d’événement. | EventDispatcher | ||
Indique si la propriété spécifiée d’un objet est définie. | Object | ||
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l’objet spécifié en tant que paramètre. | Object | ||
Indique si la propriété spécifiée existe et est énumérable. | Object | ||
Autorise cet objet DatagramSocket à recevoir les paquets entrants sur l’adresse IP et le port liés. | DatagramSocket | ||
Supprime un écouteur de l’objet EventDispatcher. | EventDispatcher | ||
Envoie le paquet contenant les octets dans l’objet ByteArray via le protocole UDP. | DatagramSocket | ||
Définit la disponibilité d’une propriété dynamique pour les opérations en boucle. | Object | ||
Renvoie la représentation de chaîne de cet objet, formatée selon les paramètres régionaux en vigueur. | Object | ||
Renvoie la représentation sous forme de chaîne de l’objet spécifié. | Object | ||
Renvoie la valeur primitive de l’objet spécifié. | Object | ||
Vérifie si un écouteur d’événement est enregistré auprès de cet objet EventDispatcher ou de ses ancêtres pour le type d’événement spécifié. | EventDispatcher |
Evénement | Synthèse | Défini par | ||
---|---|---|---|---|
[Evénement de diffusion] Distribué lorsque l’application Flash Player obtient le focus du système d’exploitation et devient active. | EventDispatcher | |||
Distribué lorsque le système d’exploitation ferme ce socket. | DatagramSocket | |||
Distribué lorsque ce socket reçoit un paquet de données. | DatagramSocket | |||
[Evénement de diffusion] Distribué lorsque l’application Flash Player ou AIR perd le focus du système d’exploitation et devient inactive. | EventDispatcher | |||
Distribué lorsque ce socket reçoit une erreur E/S. | DatagramSocket |
bound | propriété |
connected | propriété |
connected:Boolean
[lecture seule] Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 2 |
Indique si cet objet socket est actuellement connecté à une adresse et à un port distants.
Remarque : une valeur true
ne signifie pas qu’un ordinateur distant écoute sur l’adresse et le port connectés. Cela signifie simplement que cet objet DataGramSocket enverra des données à (ou recevra des données de) cette adresse et à ce port.
Implémentation
public function get connected():Boolean
Eléments de l’API associés
isSupported | propriété |
localAddress | propriété |
localPort | propriété |
remoteAddress | propriété |
remotePort | propriété |
DatagramSocket | () | Constructeur |
public function DatagramSocket()
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 2 |
Crée un objet DatagramSocket.
Valeur émise
SecurityError — si le contenu situé hors du sandbox de sécurité de l’application AIR tente de créer un objet DatagramSocket.
|
bind | () | méthode |
public function bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 2 |
Lie ce socket à l’adresse et au port locaux spécifiés.
La méthode bind()
s’exécute en mode synchrone. L’opération de liaison se termine avant que la ligne de code suivante soit exécutée.
Paramètres
localPort:int (default = 0 ) — Numéro de port auquel se relier sur l’ordinateur local. Si localPort est définie sur 0 (valeur par défaut), le prochain port système disponible est lié. L’autorisation de se connecter à un numéro de port inférieur à 1024 est soumise à la stratégie de protection du système. Sous Mac et Linux, par exemple, l’application doit être exécutée avec des privilèges racines pour se connecter aux ports inférieurs à 1024.
| |
localAddress:String (default = "0.0.0.0 ") — Adresse IP sur la machine locale à laquelle se relier. Cette adresse peut être une adresse IPv4 ou une adresse IPv6. Si le paramètre localAddress est défini sur 0.0.0.0 (valeur par défaut), le socket écoute toutes les adresses IPv4 disponibles. Pour écouter toutes les adresses IPv6, vous devez spécifier "::" comme argument de localAddress . Pour utiliser une adresse IPv6, l’ordinateur et le réseau doivent tous deux être configurés de façon à prendre en charge le protocole IPv6. En outre, un socket lié à une adresse IPv4 ne peut pas se connecter à un socket avec une adresse IPv6. De même, un socket lié à une adresse IPv6 ne peut pas se connecter à un socket avec une adresse IPv4. Le type d’adresse doit correspondre.
|
Valeur émise
RangeError — Cette erreur se produit lorsque le paramètre localPort est défini sur une valeur inférieure à 0 ou supérieure à 65535.
| |
ArgumentError — Cette erreur se produit lorsque localAddress n’est pas une adresse IP syntaxiquement correcte.
| |
IOError — Cette erreur se produit si le socket ne peut pas être lié, notamment lorsque :
| |
Error — Cette erreur se produit lorsque localAddress n’est pas une adresse locale valide.
|
Exemple ( Comment utiliser cet exemple )
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 | () | méthode |
public function close():void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 2 |
Ferme le socket.
Le socket est déconnecté de la machine distante et n’est plus lié à l’ordinateur local. Il est impossible de réutiliser un socket fermé.
Valeur émise
IOError — Indique s’il s’avère impossible de fermer le socket (notamment en raison d’une mise en réseau interne ou d’une erreur du système d’exploitation), ou si ce dernier n’est pas ouvert.
|
connect | () | méthode |
public function connect(remoteAddress:String, remotePort:int):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 2 |
Connecte le socket à une adresse et un port distants spécifiés.
Lorsqu’un socket datagramme est « connecté », les paquets peuvent être envoyés et reçus uniquement à partir de la cible spécifiée. Les paquets provenant d’autres sources sont ignorés. Il n’est pas nécessaire de connecter un socket datagramme. Etablir une connexion peut supprimer la nécessité de filtrer les paquets superflus provenant d’autres sources. Cependant, une connexion socket UDP n’est pas une connexion réseau permanente (comme c’est le cas pour une connexion TCP). Il est possible que l’extrémité distante du socket n’existe même pas.
Si la méthode bind()
n’a pas été appelée, le socket est automatiquement lié à l’adresse et au port locaux par défaut.
Paramètres
remoteAddress:String — Adresse IP de l’ordinateur distant auquel établir une connexion. Cette adresse peut être une adresse IPv4 ou une adresse IPv6. Si la méthode bind() n’a pas été appelée, la famille de l’adresse remoteAddress , IPv4 ou IPv6, est utilisée lors de l’appel de la méthode bind() par défaut.
| |
remotePort:int — Numéro du port sur la machine distante pour établir une connexion.
|
Valeur émise
RangeError — Cette erreur se produit lorsque le paramètre localPort est défini sur une valeur inférieure à 1 ou supérieure à 65535.
| |
ArgumentError — Cette erreur se produit lorsque localAddress n’est pas une adresse syntaxiquement valide, ou lors de l’utilisation d’une adresse de routage par défaut ("0.0.0.0" ou "::").
| |
IOError — Cette erreur se produit s’il est impossible de connecter le socket, notamment lorsque bind() n’a pas été appelée avant l’appel de connect() et que la liaison par défaut à la famille d’adresses distantes n’est pas possible.
|
receive | () | méthode |
public function receive():void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 2 |
Autorise cet objet DatagramSocket à recevoir les paquets entrants sur l’adresse IP et le port liés.
La fonction est immédiatement renvoyée. L’objet DatagramSocket distribue un événement data
lors de la réception d’un paquet de données.
Evénements
data: — lorsqu’un paquet UDP est reçu.
|
send | () | méthode |
public function send(bytes:ByteArray, offset:uint = 0, length:uint = 0, address:String = null, port:int = 0):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 2 |
Envoie le paquet contenant les octets dans l’objet ByteArray via le protocole UDP.
Si le socket est connecté, le paquet est envoyé à l’adresse distante et au port spécifiés dans la méthode connect()
, et il est impossible de spécifier une adresse IP et un port de destination. Si ce dernier n’est pas connecté, le paquet est envoyé à l’adresse et au port spécifiés, et vous devez fournir des valeurs valides pour les paramètres address
et port
. Si la méthode bind()
n’a pas été appelée, le socket est automatiquement lié à l’adresse et au port locaux par défaut.
Remarque : l’envoi de données à une adresse de diffusion n’est pas pris en charge.
Paramètres
bytes:ByteArray — un objet ByteArray contenant les données du paquet.
| |
offset:uint (default = 0 ) — Décalage de base zéro dans l’objet ByteArray bytes à partir duquel le paquet commence.
| |
length:uint (default = 0 ) — Nombre d’octets dans le paquet. La valeur par défaut 0 provoque l’envoi de l’intégralité du ByteArray, à partir de la valeur spécifiée par le paramètre offset .
| |
address:String (default = null ) — Adresse IPv4 ou IPv6 de l’ordinateur distant. Une adresse est requise si aucune adresse n’a encore été spécifiée à l’aide de la méthode connect() .
| |
port:int (default = 0 ) — Numéro de port sur l’ordinateur distant. Une valeur supérieure à 0 et inférieure à 65536 est requise si le port n’a pas encore été spécifié à l’aide de la méthode connect() .
|
Valeur émise
RangeError — Cette erreur se produit lorsque le paramètre port est défini sur une valeur inférieure à 1 ou supérieure à 65535.
| |
ArgumentError — Si le socket n’est pas connecté et si l’adresse n’est pas une adresse IP correctement formée.
| |
IOError — Cette erreur se produit dans les cas suivants :
| |
Error — si le paramètre bytes est défini sur null .
| |
RangeError — Si la valeur du paramètre offset est supérieure à la longueur de l’objet ByteArray spécifiée dans le paramètre bytes ou si la quantité de données spécifiée devant être écrites par offset et length dépasse les données disponibles.
| |
IllegalOperationError — Si le paramètre address ou port est spécifié lorsque le socket a déjà été connecté.
|
close | Evénement |
flash.events.Event
propriété Event.type =
flash.events.Event.CLOSE
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 2 |
Distribué lorsque le système d’exploitation ferme ce socket.
L’événement close
n’est pas distribué lorsque la méthode close()
de DatagramSocket est appelée.
Event.CLOSE
définit la valeur de la propriété type
d’un objet événement close
.
Les propriétés de cet événement sont les suivantes :
Propriété | Valeur |
---|---|
bubbles | false |
cancelable | false ; il n’existe aucun comportement par défaut à annuler. |
currentTarget | L’objet qui traite activement l’objet Event avec un écouteur d’événements. |
target | Objet dont la connexion a été fermée. |
data | Evénement |
flash.events.DatagramSocketDataEvent
propriété DatagramSocketDataEvent.type =
flash.events.DatagramSocketDataEvent.DATA
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 2 |
Distribué lorsque ce socket reçoit un paquet de données.
Définit la valeur de la propriététype
d’un objet événement data
.
ioError | Evénement |
flash.events.IOErrorEvent
propriété IOErrorEvent.type =
flash.events.IOErrorEvent.IOERROR
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 2.5 |
Distribué lorsque ce socket reçoit une erreur E/S.
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, 09:30 AM Z