Paket | flash.net |
Klass | public class DatagramSocket |
Arv | DatagramSocket EventDispatcher Object |
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 2 |
Stöd för AIR-profiler: Den här funktionen stöds på alla operativsystem för datorer, på iOS (från och med AIR 3.8) och på Android (från och med AIR 3.8). Den här funktionen stöds inte på enheter med AIR for TV. Du kan testa stödet vid körning med egenskapen DatagramSocket.isSupported
. På sidan om stöd för AIR-profiler hittar du mer information om API-stöd för flera profiler.
Datagrampaket överförs individuellt mellan källan och målet. Paket kan tas emot i en annan ordning än de skickas. Paket som går förlorade under överföringen skickas inte igen och identifieras inte heller.
Data som skickas med en datagramsocket delas inte automatiskt upp i paket med lämplig storlek för överföring. Om du skickar ett UDP-paket som överskrider storleken för maximal överföringsenhet (MTU) tas paketet bort av nätverket (utan någon varning). Storleken på den maximala överföringsenheten avgörs av den minsta maximala överföringsenheten för de gränssnitt, växlar och routrar som finns i överföringssökvägen. Du kan använda klassen NetworkInterface för att fastställa den maximala överföringsenheten (MTU) för det lokala gränssnittet, men andra noder i nätverket kan ha andra MTU-värden.
Klassen Socket använder TCP, som har garanterad paketleverans och delar upp och sätter ihop stora paket automatiskt. TCP har även bättre hantering av nätverksbandbredd. De här funktionerna innebär att data som skickas via en TCP-socket får en större fördröjning, men i de flesta fall är fördelarna med TCP fler än nackdelarna. Merparten av nätverkskommunikationen bör använda klassen Socket i stället för klassen DatagramSocket.
Klassen DatagramSocket är praktiskt när du arbetar med program där det är viktigt med en låg överföringsfördröjning och där paketförlust är acceptabelt. För exempelvis nätverksåtgärder i VoIP-program (Voice-over-IP) och i realtidsspel med flera spelare är UDP ofta en fördel. Klassen DatagramSocket är även praktisk för en del program på serversidan. Eftersom UDP är ett tillståndslöst protokoll kan en server hantera fler förfrågningar från en klient än med TCP.
Klassen DatagramSocket kan bara användas i Adobe AIR-program och bara i programmets säkerhetssandlåda.
Mer information om säkerhet finns i avsnittet Security på Flash Player Developer Center.
Lär dig mer
Relaterade API-element
Egenskap | Definieras med | ||
---|---|---|---|
bound : Boolean [skrivskyddad]
Anger om den här socketen för tillfället är bunden till en lokal adress och port. | DatagramSocket | ||
connected : Boolean [skrivskyddad]
Anger om den här socketen för tillfället är ansluten till en fjärradress och -port. | DatagramSocket | ||
constructor : Object
En referens till klassobjektet eller konstruktorfunktionen för en given objektinstans. | Object | ||
isSupported : Boolean [statisk] [skrivskyddad]
Anger om DatagramSocket-funktioner stöds i körningsmiljön eller inte. | DatagramSocket | ||
localAddress : String [skrivskyddad]
Den IP-adress som den här socketen är bunden till på den lokala datorn. | DatagramSocket | ||
localPort : int [skrivskyddad]
Den port som den här socketen är bunden till på den lokala datorn. | DatagramSocket | ||
remoteAddress : String [skrivskyddad]
IP-adressen för den fjärrdator till vilken den här socketen är ansluten. | DatagramSocket | ||
remotePort : int [skrivskyddad]
Porten på den fjärrdator till vilken den här socketen är ansluten. | DatagramSocket |
Metod | Definieras med | ||
---|---|---|---|
Skapar ett DatagramSocket-objekt. | DatagramSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registrerar ett händelseavlyssnarobjekt för ett EventDispatcher-objekt så att avlyssnaren får meddelanden om händelser. | EventDispatcher | ||
Binder den här socketen till den angivna lokala adressen och porten. | DatagramSocket | ||
Stänger socketen. | DatagramSocket | ||
Ansluter socketen till en angiven fjärradress och -port. | DatagramSocket | ||
Skickar en händelse till händelseflödet. | EventDispatcher | ||
Kontrollerar om EventDispatcher-objektet har några avlyssnare registrerade för en viss typ av händelse. | EventDispatcher | ||
Anger om det finns en egenskap angiven för ett objekt. | Object | ||
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. | Object | ||
Anger om den angivna egenskapen finns och är uppräkningsbar. | Object | ||
Aktivera detta DatagramSocket-objekt för att hämta inkommande paket på den bundna IP-adressen och porten. | DatagramSocket | ||
Tar bort en avlyssnare från EventDispatcher-objektet. | EventDispatcher | ||
Skickar paket med de byte som finns i ByteArray med UDP. | DatagramSocket | ||
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. | Object | ||
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner. | Object | ||
Returnerar det angivna objektets strängbeteckning. | Object | ||
Returnerar det angivna objektets primitiva värde. | Object | ||
Kontrollerar om en händelseavlyssnare är registrerad för det här EventDispatcher-objektet eller något av dess överordnade objekt för den angivna händelsetypen. | EventDispatcher |
Händelse | Sammanfattning | Definieras med | ||
---|---|---|---|---|
[utsändningshändelse] Skickas när Flash Player eller AIR får operativsystemfokus och blir aktivt. | EventDispatcher | |||
Skickas när den här socketen stängs av operativsystemet. | DatagramSocket | |||
Skickas när den här socketen tar emot ett paket med data. | DatagramSocket | |||
[utsändningshändelse] Skickas när Flash Player eller AIR förlorar operativsystemfokus och blir inaktivt. | EventDispatcher | |||
Skickas när den här socketen tar emot ett I/O-fel. | DatagramSocket |
bound | egenskap |
connected | egenskap |
connected:Boolean
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 2 |
Anger om den här socketen för tillfället är ansluten till en fjärradress och -port.
Obs! Värdet true
betyder inte att en fjärrdator lyssnar på den ansluta adressen och porten. Det betyder bara att det här DataGramSocket-objektet endast skickar data till eller tar emot data från den adressen och porten.
Implementering
public function get connected():Boolean
Relaterade API-element
isSupported | egenskap |
localAddress | egenskap |
localPort | egenskap |
remoteAddress | egenskap |
remotePort | egenskap |
DatagramSocket | () | Konstruktor |
public function DatagramSocket()
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 2 |
Skapar ett DatagramSocket-objekt.
Utlöser
SecurityError — om innehåll utanför AIR-programmets säkerhetssandlåda försöker skapa ett DatagramSocket-objekt.
|
bind | () | metod |
public function bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 2 |
Binder den här socketen till den angivna lokala adressen och porten.
Metoden bind()
körs synkront. Bindningsåtgärden slutförs innan nästa kodrad körs.
Parametrar
localPort:int (default = 0 ) — Numret på den port som ska bindas till på den lokala datorn. Om localPort är inställt på 0 (standard) binds nästa tillgängliga systemport. Huruvida det går att ansluta till portnummer under 1024 beror på systemets säkerhetsprinciper. På till exempel Mac- och Linux-system måste programmet köras med rotbehörighet för att få ansluta till portar under 1024.
| |
localAddress:String (default = "0.0.0.0 ") — IP-adressen att binda till på den lokala datorn. Detta kan vara en IPv4- eller IPv6-adress. Om localAddress är 0.0.0.0 (standard) lyssnar socketen på alla tillgängliga IPv4-adresser. Om du vill lyssna på alla tillgängliga IPv6-adresser måste du ange "::" som localAddress -argument. Om du vill använda en IPv6-adress måste både datorn och nätverket vara konfigurerade så att de har stöd för IPv6. Dessutom kan en socket som bundits till en IPv4-adress inte ansluta till en socket med en IPv6-adress. Omvänt kan en socket som bundits till en IPv6-adress inte heller ansluta till en socket med en IPv4-adress. Adresstyperna måste matcha varandra.
|
Utlöser
RangeError — Det här felet inträffar när localPort är mindre än 0 eller större än 65535.
| |
ArgumentError — Det här felet inträffar när localAddress inte är en syntaktiskt giltig IP-adress.
| |
IOError — Det här felet inträffar om det inte går att binda socketen, till exempel när:
| |
Error — Det här felet inträffar när localAddress inte är en giltig lokal adress.
|
Exempel ( Så här använder du exemplet )
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 | () | metod |
public function close():void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 2 |
Stänger socketen.
Socketen kopplas från fjärrdatorn och bindningen till den lokala datorn tas bort. En stängd socket kan inte återanvändas.
Utlöser
IOError — Om det inte går att stänga socketen (på grund av ett internt fel, ett nätverksfel eller ett operativsystemfel) eller om socketen inte är öppen.
|
connect | () | metod |
public function connect(remoteAddress:String, remotePort:int):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 2 |
Ansluter socketen till en angiven fjärradress och -port.
När en datagramsocket ”ansluts” kan datagrampaket bara skickas till och tas emot från det angivna målet. Paket från andra källor ignoreras. Anslutning av en datagramsocket behövs inte. Om en anslutning upprättas kan det eliminera behovet av att filtrera bort överflödiga paket från andra källor. En UDP-socketanslutning är dock inte någon beständig nätverksanslutning (till skillnad från en TCP-socketanslutning). Det är möjligt att fjärränden av socketen inte ens finns.
Om metoden bind()
inte har anropats binds socketen automatiskt till den lokala standardadressen och porten.
Parametrar
remoteAddress:String — IP-adressen för den fjärrdator till vilken en anslutning ska skapas. Detta kan vara en IPv4- eller IPv6-adress. Om bind() inte har anropats används adressfamiljen för remoteAddress , IPv4 eller IPv6, vid anrop till standard-bind() .
| |
remotePort:int — Portnumret på den fjärrdator som används för anslutningen.
|
Utlöser
RangeError — Det här felet inträffar när localPort är mindre än 1 eller större än 65535.
| |
ArgumentError — Det här felet inträffar när localAddress inte är en syntaktiskt giltig adress. Eller när en standardroutningsadress ('0.0.0.0' eller '::') används.
| |
IOError — Det här felet inträffar om socketen inte kan anslutas, t.ex. om bind() inte anropas före anropet till connect() och standardbindning till fjärradressfamiljen inte är möjlig.
|
receive | () | metod |
public function receive():void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 2 |
Aktivera detta DatagramSocket-objekt för att hämta inkommande paket på den bundna IP-adressen och porten.
Funktionen returneras omedelbart. Från DatagramSocket-objektet skickas en data
-händelse när ett datapaket tas emot.
Händelser
data: — när ett UDP-paket tas emot.
|
send | () | metod |
public function send(bytes:ByteArray, offset:uint = 0, length:uint = 0, address:String = null, port:int = 0):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 2 |
Skickar paket med de byte som finns i ByteArray med UDP.
Om socketen är ansluten skickas paketet till den fjärradress och -port som anges i metoden connect()
och ingen IP-måladress eller målport kan anges. Om socketen inte är ansluten skickas paketet till angiven adress och port, och du måste ange giltiga värden för address
och port
. Om metoden bind()
inte har anropats binds socketen automatiskt till den lokala standardadressen och porten.
Obs! Det går inte att skicka data till en utsändande adress.
Parametrar
bytes:ByteArray — en ByteArray som innehåller paketdata.
| |
offset:uint (default = 0 ) — Den nollbaserade förskjutningen i ByteArray-objektet bytes där paketet börjar.
| |
length:uint (default = 0 ) — Antalet byte i paketet. Standardvärdet 0 innebär att hela ByteArray skickas, med början vid det värde som anges av parametern offset .
| |
address:String (default = null ) — Fjärrdatorns IPv4- eller IPv6-adress. Det krävs en adress om du inte redan har angett en med metoden connect() .
| |
port:int (default = 0 ) — Fjärrdatorns portnummer. Ett värde större än 0 och mindre än 65 536 krävs om porten inte redan har angetts med metoden connect() .
|
Utlöser
RangeError — Det här felet inträffar när port är mindre än 1 eller större än 65535.
| |
ArgumentError — Om socketen inte är ansluten och adress inte är en syntaktiskt giltig IP-adress.
| |
IOError — Det här felet inträffar:
| |
Error — om parametern bytes är null .
| |
RangeError — Om offset är större än längden på den ByteArray som anges i bytes eller om den datamängd som ska skrivas av offset plus length överskrider tillgängliga data.
| |
IllegalOperationError — Om parametern address eller port anges när socketen redan har anslutits.
|
close | Händelse |
flash.events.Event
egenskap Event.type =
flash.events.Event.CLOSE
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 2 |
Skickas när den här socketen stängs av operativsystemet.
close
-händelsen skickas inte när metoden close()
för DatagramSocket anropas.
Event.CLOSE
-konstanten definierar värdet på type
-egenskapen i ett close
-händelseobjekt.
Den här händelsen har följande egenskaper:
Egenskap | Värde |
---|---|
bubbles | false |
cancelable | false ; det finns inget standardbeteende att avbryta. |
currentTarget | Det objekt som aktivt behandlar Event-objektet med en händelseavlyssnare. |
target | Det objekt vars anslutning har stängts. |
data | Händelse |
flash.events.DatagramSocketDataEvent
egenskap DatagramSocketDataEvent.type =
flash.events.DatagramSocketDataEvent.DATA
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 2 |
Skickas när den här socketen tar emot ett paket med data.
Definierar värdet för ettdata
-händelseobjekts type
-egenskap.
ioError | Händelse |
flash.events.IOErrorEvent
egenskap IOErrorEvent.type =
flash.events.IOErrorEvent.IOERROR
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 2.5 |
Skickas när den här socketen tar emot ett I/O-fel.
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, 01:40 PM Z