Pakket | flash.net |
Klasse | public class DatagramSocket |
Overerving | DatagramSocket EventDispatcher Object |
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 2 |
AIR-profielondersteuning: Deze functie wordt ondersteund door alle desktopbesturingssystemen, op iOS (vanaf AIR 3.8) en op Android (vanaf AIR 3.8). Deze functie wordt niet ondersteund op AIR for TV-apparaten. Met de eigenschap DatagramSocket.isSupported
kunt u testen op ondersteuning tijdens runtime. Zie AIR-profielondersteuning voor meer informatie over API-ondersteuning voor meerdere profielen.
Datagrampakketten worden individueel verzonden tussen de bron en het doel. Pakketten kunnen in een andere volgorde aankomen dan de volgorde waarin ze zijn verstuurd. Als pakketten die tijdens de overdracht verloren raken, wordt dit niet ontdekt. De pakketten worden niet opnieuw verzonden.
Gegevens die met een datagramsocket worden verzonden, worden niet automatisch opgedeeld in pakketten van verzendbare grootte. Als u een UDP-pakket verstuurt, dat groter is dan de maximale transmissie-eenheid (MTU)-grootte, verwijdert het netwerk het pakket (zonder waarschuwing). De beperkende MTU is de kleinste MTU van een willekeurige interface, switch of router in het overdrachtspad. Met de NetworkInterface-klasse bepaalt u de MTU van de lokale interface, maar andere knooppunten in het netwerk kunnen andere MTU-waarden hebben.
De Socket-klasse gebruikt TCP, waardoor de levering van het pakket is gegarandeerd en waarbij grote pakketten automatisch worden opgedeeld en opnieuw gecombineerd. TCP biedt ook een beter bandbreedtebeheer voor het netwerk. Als u gegevens verstuurt met een TCP-socket zorgen deze functies voor een hogere latentie, maar in de meeste gevallen wordt dit ruimschoots gecompenseerd door de voordelen van TCP. Bij netwerkcommunicatie moet voornamelijk de Socket-klasse worden gebruikt in plaats van de DatagramSocket-klasse.
De DatagramSocket-klasse is handig als u werkt met toepassingen waarbij een lage overdrachtslatentie niet belangrijk is en waarbij pakketverlies acceptabel is. Bij netwerkbewerkingen in VoIP-toepassingen en bij real-time games voor meerdere spelers is het gebruik van UDP vaak handig. De DatagramSocket-klasse is ook handig voor bepaalde toepassingen op de server. Aangezien het UDP-protocol geen status bijhoudt, kan een server meer aanvragen van meer clients verwerken dan met TCP.
De DatagramSocket-klasse kan alleen worden gebruikt in Adobe AIR-toepassingen en alleen in de beveiligingssandbox van de toepassing.
Lees voor meer informatie over beveiliging het onderwerp Security in het Flash Player Developer Center.
Meer informatie
Verwante API-elementen
Eigenschap | Gedefinieerd door | ||
---|---|---|---|
bound : Boolean [alleen-lezen]
Geeft aan of dit socketobject momenteel gekoppeld is aan een lokaal adres en een lokale poort. | DatagramSocket | ||
connected : Boolean [alleen-lezen]
Geeft aan of dit socketobject momenteel gekoppeld is aan een adres en een poort op afstand. | DatagramSocket | ||
constructor : Object
Verwijzing naar het klasseobject of de constructorfunctie van een bepaalde objectinstantie. | Object | ||
isSupported : Boolean [statisch] [alleen-lezen]
Geeft aan of DatagramSocket-functies in de runtimeomgeving worden ondersteund of niet. | DatagramSocket | ||
localAddress : String [alleen-lezen]
Het IP-adres waaraan deze socket gekoppeld is op een lokale machine. | DatagramSocket | ||
localPort : int [alleen-lezen]
De poort waaraan deze socket gekoppeld is op een lokale machine. | DatagramSocket | ||
remoteAddress : String [alleen-lezen]
Het IP-adres van de machine op afstand waaraan deze socket is verbonden. | DatagramSocket | ||
remotePort : int [alleen-lezen]
De poort van de machine op afstand waaraan deze socket is verbonden. | DatagramSocket |
Methode | Gedefinieerd door | ||
---|---|---|---|
Maakt een DatagramSocket-object. | DatagramSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registreert een gebeurtenislistenerobject bij een object EventDispatcher, zodat de listener een melding van een gebeurtenis ontvangt. | EventDispatcher | ||
Koppelt deze socket aan het opgegeven lokale adres en de lokale poort. | DatagramSocket | ||
Sluit de socket. | DatagramSocket | ||
Koppelt de socket aan een opgegeven adres en poort op afstand. | DatagramSocket | ||
Verzendt een gebeurtenis naar de gebeurtenisstroom. | EventDispatcher | ||
Controleert of het object EventDispatcher listeners heeft geregistreerd voor een specifiek type gebeurtenis. | EventDispatcher | ||
Geeft aan of voor een object een opgegeven eigenschap is gedefinieerd. | Object | ||
Geeft aan of een instantie van de klasse Object zich in de prototypeketen van het object bevindt dat als parameter is opgegeven. | Object | ||
Geeft aan of de opgegeven eigenschap bestaat en kan worden opgesomd. | Object | ||
Schakelt dit object DatagramSocket in zodat het binnenkomende pakketten op het gekoppelde IP-adres en -poort ontvangt. | DatagramSocket | ||
Verwijdert een listener uit het object EventDispatcher. | EventDispatcher | ||
Verstuurt via UDP een pakket met de bytes in de ByteArray. | DatagramSocket | ||
Stelt de beschikbaarheid van een dynamische eigenschap voor lusbewerkingen in. | Object | ||
Geeft de tekenreeksweergave van dit object weer, geformatteerd volgens de locatiespecifieke conventies. | Object | ||
Retourneert een tekenreeksrepresentatie van het opgegeven object. | Object | ||
Retourneert de primitieve waarde van het opgegeven object. | Object | ||
Controleert of een gebeurtenislistener is geregistreerd bij dit object EventDispatcher of een van de voorouders voor het opgegeven type gebeurtenis. | EventDispatcher |
Gebeurtenis | Overzicht | Gedefinieerd door | ||
---|---|---|---|---|
[uitgezonden gebeurtenis] Wordt verzonden wanneer Flash Player of de AIR-toepassing de besturingssysteemfocus krijgt en actief wordt. | EventDispatcher | |||
Wordt verstuurd wanneer het besturingssysteem deze socket sluit. | DatagramSocket | |||
Wordt verzonden wanneer deze socket een pakket gegevens ontvangt. | DatagramSocket | |||
[uitgezonden gebeurtenis] Wordt verzonden wanneer Flash Player of de AIR-toepassing de systeemfocus verliest en inactief wordt. | EventDispatcher | |||
Wordt verzonden wanneer deze socket een I/O-fout ontvangt. | DatagramSocket |
bound | eigenschap |
connected | eigenschap |
connected:Boolean
[alleen-lezen] Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 2 |
Geeft aan of dit socketobject momenteel gekoppeld is aan een adres en een poort op afstand.
Opmerking: de waarde True
houdt niet in dat een externe computer ook werkelijk luistert op het verbonden adres en de poort. Het betekent alleen dat dit DataGramSocket-object alleen gegevens verzendt naar en ontvangt van het opgegeven adres en de poort.
Implementatie
public function get connected():Boolean
Verwante API-elementen
isSupported | eigenschap |
localAddress | eigenschap |
localPort | eigenschap |
remoteAddress | eigenschap |
remotePort | eigenschap |
DatagramSocket | () | Constructor |
public function DatagramSocket()
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 2 |
Maakt een DatagramSocket-object.
Gegenereerde uitzondering
SecurityError — als inhoud buiten de beveiligingssandbox van de AIR-toepassing probeert om een DatagramSocket-object te maken.
|
bind | () | methode |
public function bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 2 |
Koppelt deze socket aan het opgegeven lokale adres en de lokale poort.
De methode bind()
wordt synchroon uitgevoerd. De bind-bewerking wordt voltooid voordat de volgende coderegel wordt uitgevoerd.
Parameters
localPort:int (default = 0 ) — Het nummer van de poort waarmee verbinding moet worden gemaakt op de lokale computer. Als localPort op 0 is ingesteld (de standaardwaarde) wordt de volgende beschikbare systeempoort gekoppeld. Toestemming voor het maken van een verbinding met een poortnummer onder 1024 is afhankelijk van het systeembeveiligingsbeleid. Op Mac- en Linux-systemen moet de toepassing bijvoorbeeld actief zijn met hoofdbevoegdheden voor het maken van een verbinding met poorten onder 1024.
| |
localAddress:String (default = "0.0.0.0 ") — Het IP-adres op de lokale machine waaraan wordt gekoppeld. Dit adres kan een IPv4- of IPv6-adres zijn. Als localAddress is ingesteld op 0.0.0.0 (de standaardinstelling), voegt de socket een listener toe op alle beschikbare IPv4-adressen. Als u op alle beschikbare IPv6-adressen een listener wilt toevoegen, moet u "::" opgeven als het argument voor localAddress . Om een IPv6-adres te gebruiken, moet de computer en het netwerk zijn geconfigureerd, zodat deze IPv6 ondersteunen. Bovendien kan een socket die gebonden is aan een IPv4-adres geen verbinding maken met een socket met een IPv6-adres. Op dezelfde manier geldt dat een socket die gebonden is aan een IPv6-adres geen verbinding kan maken met een socket met een IPv4-adres. Het adrestype moet overeenkomen.
|
Gegenereerde uitzondering
RangeError — Deze fout treedt op als localPort kleiner dan 0 of groter dan 65535 is.
| |
ArgumentError — Deze fout treedt op als localAddress syntactisch ongeldig is.
| |
IOError — Deze fout treedt op als de socket niet kan worden gekoppeld, zoals wanneer:
| |
Error — Deze fout treedt op als localAddress geen geldig lokaal adres is.
|
Voorbeeld ( Hoe dit voorbeeld te gebruiken )
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
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 2 |
Sluit de socket.
De socket wordt losgekoppeld van de externe computer en de binding met de lokale computer wordt verbroken. Een gesloten socket kan niet opnieuw worden gebruikt.
Gegenereerde uitzondering
IOError — Als de socket niet kan worden gesloten (vanwege een interne fout, een netwerkfout of een fout met het besturingssysteem) of als de socket niet is geopend.
|
connect | () | methode |
public function connect(remoteAddress:String, remotePort:int):void
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 2 |
Koppelt de socket aan een opgegeven adres en poort op afstand.
Wanneer u een datagramsocket 'aansluit', kunnen datagrampakketten alleen worden verzonden naar en ontvangen van het opgegeven doel. Pakketten van andere bronnen worden genegeerd. Het aansluiten van een datagramsocket is niet verplicht. Door een verbinding te maken verdwijnt de noodzaak om irrelevante pakketten van andere bronnen uit te filteren. Een UDP-socketverbinding is geen permanente netwerkverbinding (zoals een TCP-verbinding). Het is mogelijk dat externe uiteinde van de socket niet eens bestaat.
Als de methode bind()
niet is aangeroepen, wordt de socket automatisch gebonden aan het lokale standaardadres en de lokale standaardpoort.
Parameters
remoteAddress:String — Het IP-adres van de externe computer waarmee een verbinding wordt gemaakt. Dit adres kan een IPv4- of IPv6-adres zijn. Als bind() niet is aangeroepen, wordt de adresfamilie van remoteAddress , IPv4 of IPv6, gebruikt bij het aanroepen van de standaardbind() .
| |
remotePort:int — Het poortnummer op de externe computer waarmee een verbinding tot stand wordt gebracht.
|
Gegenereerde uitzondering
RangeError — Deze fout treedt op als localPort kleiner dan 1 of groter dan 65535 is.
| |
ArgumentError — Deze fout treedt op als localAddress syntactisch ongeldig is. Of als een standaardrouteadres ("0.0.0.0" of "::") wordt gebruikt.
| |
IOError — Deze fout treedt op als de socket niet verbonden kan worden, bijvoorbeeld wanneer bind() niet is aangeroepen voordat connect() werd aangeroepen en standaardbinding met de externe adresfamilie niet mogelijk is.
|
receive | () | methode |
public function receive():void
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 2 |
Schakelt dit object DatagramSocket in zodat het binnenkomende pakketten op het gekoppelde IP-adres en -poort ontvangt.
De functie wordt meteen geretourneerd. Het object DatagramSocket verzendt een gebeurtenis data
wanneer een gegevenspakket wordt ontvangen.
Gebeurtenissen
data: — wanneer een UDP-pakket wordt ontvangen.
|
send | () | methode |
public function send(bytes:ByteArray, offset:uint = 0, length:uint = 0, address:String = null, port:int = 0):void
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 2 |
Verstuurt via UDP een pakket met de bytes in de ByteArray.
Als de socket is verbonden, wordt het pakket verzonden naar het externe adres en de externe poort die zijn opgegeven in de methode connect()
, en kunnen er geen IP-adres en poort worden opgegeven. Als de socket niet is verbonden, wordt het pakket verzonden naar het opgegeven adres en de opgegeven poort en moet u geldige waarden opgeven voor address
en port
. Als de methode bind()
niet is aangeroepen, wordt de socket automatisch gebonden aan het lokale standaardadres en de lokale standaardpoort.
Opmerking: Het versturen van gegevens naar een broadcastadres wordt niet ondersteund.
Parameters
bytes:ByteArray — een ByteArray met de pakketgegevens.
| |
offset:uint (default = 0 ) — De op nul gebaseerde verschuiving in het bytes ByteArray-object waar het pakket begint.
| |
length:uint (default = 0 ) — Het aantal bytes in het pakket. Bij de standaardwaarde nul wordt de gehele ByteArray verzonden, te beginnen bij de waarde die door de parameter offset wordt opgegeven.
| |
address:String (default = null ) — Het IPv4- of IPv6-adres van de externe computer. Een adres is vereist als dit niet al is opgegeven aan de hand van de methode connect() .
| |
port:int (default = 0 ) — Het poortnummer van de externe computer. Een waarde groter dan 0 en kleiner dan 65536 is vereist als de poort niet al is opgegeven aan de hand van de methode connect() .
|
Gegenereerde uitzondering
RangeError — Deze fout treedt op als port kleiner dan 1 of groter dan 65535 is.
| |
ArgumentError — Als de socket niet is verbonden en address geen geldig IP-adres is.
| |
IOError — Deze fout treedt op:
| |
Error — Als de parameter bytes null is.
| |
RangeError — Als offset groter is dan de lengte van de ByteArray die opgegeven is in bytes of als de hoeveelheid opgegeven gegevens voor schrijven door offset plus length groter is dan de beschikbare gegevens.
| |
IllegalOperationError — Als de parameters address en port worden opgegeven terwijl de socket al is verbonden.
|
close | Gebeurtenis |
flash.events.Event
eigenschap Event.type =
flash.events.Event.CLOSE
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 2 |
Wordt verstuurd wanneer het besturingssysteem deze socket sluit.
De gebeurtenis close
wordt niet verzonden wanneer de DatagramSocket close()
-methode wordt aangeroepen.
Event.CLOSE
definieert de waarde van de eigenschap type
van een close
-gebeurtenisobject.
Deze gebeurtenis heeft de volgende eigenschappen:
Eigenschap | Waarde |
---|---|
bubbles | false |
cancelable | false ; er is geen standaardgedrag om te annuleren. |
currentTarget | Het object dat het gebeurtenisobject actief verwerkt met een gebeurtenislistener. |
target | Het object waarvan de verbinding is gesloten. |
data | Gebeurtenis |
flash.events.DatagramSocketDataEvent
eigenschap DatagramSocketDataEvent.type =
flash.events.DatagramSocketDataEvent.DATA
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 2 |
Wordt verzonden wanneer deze socket een pakket gegevens ontvangt.
Definieert de waarde van de eigenschaptype
van een gebeurtenisobject data
.
ioError | Gebeurtenis |
flash.events.IOErrorEvent
eigenschap IOErrorEvent.type =
flash.events.IOErrorEvent.IOERROR
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 2.5 |
Wordt verzonden wanneer deze socket een I/O-fout ontvangt.
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; } } }
Wed Jun 13 2018, 11:42 AM Z