Pakiet | flash.net |
Klasa | public class DatagramSocket |
Dziedziczenie | DatagramSocket EventDispatcher Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Obsługa profilów AIR: Ta funkcja jest obsługiwana na wszystkich komputerowych systemach operacyjnych, w systemie iOS (od wersji AIR 3.8) i w systemie Android (od wersji AIR 3.8). Ta funkcja nie jest obsługiwana na urządzeniach telewizyjnych ze środowiskiem AIR. W czasie wykonywania można sprawdzić, czy funkcja jest obsługiwana, odczytując właściwość DatagramSocket.isSupported
. Więcej informacji o obsłudze elementów interfejsu API w różnych profilach można znaleźć w sekcji Obsługa profilów aplikacji AIR.
Pakiety datagramów są przesyłane pojedynczo między źródłem a celem. Pakiety mogą docierać do celu w kolejności innej niż ta, w której zostały wysłane. Pakiety utracone w transmisji nie są przesyłane ponownie ani nawet nie są wykrywane.
Dane wysyłane przez gniazdo datagramowe nie są automatycznie rozbijane na pakiety o rozmiarze nadającym się do transmisji. W razie wysłania pakietu UDP, którego rozmiar jest większy od maksymalnej jednostki transmisji (MTU), pakiet zostanie odrzucony przez sieć (bez ostrzeżenia). Graniczną jednostką MTU jest najmniejsza MTU dowolnego interfejsu, przełącznika lub routera na trasie transmisji. Za pomocą klasy NetworkInterface można określić jednostkę MTU interfejsu lokalnego, ale pozostałe węzły w sieci mogą mieć inne wartości MTU.
W przypadku klasy Socket używany jest protokół TCP, który zapewnia gwarancję dostarczania pakietów i automatyczne dzielenie oraz ponowne składanie dużych pakietów. Protokół TCP zapewnia także lepsze zarządzanie pasmem sieciowym. Oznacza to, że dane wysyłane przez gniazdo TCP napotykają większe opóźnienia, ale w większości przypadków korzyści ze stosowania protokołu TCP przeważają nad kosztami. Do komunikacji sieciowej należy w miarę możliwości używać klasy Socket, a nie klasy DatagramSocket.
Klasa DatagramSocket jest przydatna w sytuacjach, gdy istotna jest minimalizacja opóźnień transmisji, ale dopuszczalna jest utrata pakietów. Do zastosowań, w których korzystne jest użycie protokołu UDP, należy komunikacja voice-over-IP (VoIP) oraz gry typu multiplayer rozgrywane w czasie rzeczywistym. Klasa DatagramSocket jest także przydatna w niektórych zastosowaniach serwerowych. Ponieważ UDP jest protokołem niezachowującym stanu sesji, serwer może obsłużyć więcej żądań od większej liczby klientów niż w przypadku protokołu TCP.
Klasa DatagramSocket może być używana tylko w aplikacjach Adobe AIR i tylko w obszarze izolowanym aplikacji.
Więcej informacji na temat zabezpieczeń zawiera odpowiedni temat w Centrum programistów programu Flash Player w kategorii Bezpieczeństwo.
Więcej informacji
Powiązane elementy interfejsu API
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
bound : Boolean [tylko do odczytu]
Wskazuje, czy ten obiekt gniazda jest obecnie powiązany z lokalnym adresem i portem. | DatagramSocket | ||
connected : Boolean [tylko do odczytu]
Wskazuje, czy ten obiekt gniazda jest obecnie połączony ze zdalnym adresem i portem. | DatagramSocket | ||
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
isSupported : Boolean [statyczny] [tylko do odczytu]
Wskazuje, czy funkcje obiektu DatagramSocket są obsługiwane w środowisku wykonawczym. | DatagramSocket | ||
localAddress : String [tylko do odczytu]
Adres IP, z którym to gniazdo jest powiązane na komputerze lokalnym. | DatagramSocket | ||
localPort : int [tylko do odczytu]
Port, z którym to gniazdo jest powiązane na komputerze lokalnym. | DatagramSocket | ||
remoteAddress : String [tylko do odczytu]
Adres IP komputera zdalnego, z którym jest połączone to gniazdo. | DatagramSocket | ||
remotePort : int [tylko do odczytu]
Port komputera zdalnego, z którym jest połączone to gniazdo. | DatagramSocket |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
Tworzy obiekt DatagramSocket. | DatagramSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Rejestruje obiekt detektora zdarzeń w obiekcie EventDispatcher, dzięki czemu detektor będzie otrzymywał powiadomienia o zdarzeniu. | EventDispatcher | ||
Wiąże to gniazdo z określonym adresem i portem lokalnym. | DatagramSocket | ||
Zamyka gniazdo. | DatagramSocket | ||
Łączy gniazdo z określonym adresem i portem zdalnym. | DatagramSocket | ||
Wywołuje zdarzenie, tj. kieruje je do przepływu zdarzeń. | EventDispatcher | ||
Sprawdza, czy obiekt EventDispatcher zawiera jakiekolwiek detektory zarejestrowane dla konkretnego typu zdarzeń. | EventDispatcher | ||
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Umożliwia temu obiektowi DatagramSocket odbieranie przychodzących pakietów na powiązanym adresie IP i porcie. | DatagramSocket | ||
Usuwa detektor z obiektu EventDispatcher. | EventDispatcher | ||
Wysyła za pośrednictwem protokołu UDP pakiet zawierający bajty przekazane w tablicy ByteArray. | DatagramSocket | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
Zwraca ciąg reprezentujący określony obiekt. | Object | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object | ||
Sprawdza, czy detektor zdarzeń określonego typu jest zarejestrowany w tym obiekcie EventDispatcher lub jego elementach macierzystych. | EventDispatcher |
Zdarzenie | Podsumowanie | Zdefiniowane przez | ||
---|---|---|---|---|
[zdarzenie broadcast] Wywoływane, gdy program Flash Player lub aplikacja środowiska wykonawczego AIR uzyskuje fokus w systemie operacyjnym i przechodzi w stan aktywny. | EventDispatcher | |||
Wywoływane, gdy system operacyjny zamyka to gniazdo. | DatagramSocket | |||
Wywoływane, gdy gniazdo odbierze pakiet danych. | DatagramSocket | |||
[zdarzenie broadcast] Wywoływane, gdy program Flash Player lub aplikacja AIR traci fokus w systemie operacyjnym i przechodzi w stan nieaktywny. | EventDispatcher | |||
Wywoływane, gdy to gniazdo wykryje błąd wejścia/wyjścia. | DatagramSocket |
bound | właściwość |
connected | właściwość |
connected:Boolean
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Wskazuje, czy ten obiekt gniazda jest obecnie połączony ze zdalnym adresem i portem.
Uwaga: Wartość true
nie oznacza, że zdalny komputer nasłuchuje pod adresem i portem określonym w połączeniu. Oznacza tylko, że dany obiekt DataGramSocket będzie wysyłał i odbierał dane tylko z tego adresu i portu.
Implementacja
public function get connected():Boolean
Powiązane elementy interfejsu API
isSupported | właściwość |
localAddress | właściwość |
localPort | właściwość |
remoteAddress | właściwość |
remotePort | właściwość |
DatagramSocket | () | Konstruktor |
public function DatagramSocket()
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Tworzy obiekt DatagramSocket.
Zgłasza
SecurityError — jeśli treść spoza obszaru izolowanego aplikacji AIR próbuje utworzyć obiekt DatagramSocket.
|
bind | () | metoda |
public function bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Wiąże to gniazdo z określonym adresem i portem lokalnym.
Metoda bind()
jest wykonywana synchronicznie Następny wiersz kodu jest wykonywany dopiero po ukończeniu operacji wiązania.
Parametry
localPort:int (default = 0 ) — Numer portu w komputerze lokalnym, z którym ma zostać utworzone powiązanie. Jeśli localPort ma wartość 0 (ustawienie domyślne), tworzone jest powiązanie z następnym wolnym portem w systemie Uprawnienia do nawiązywania połączeń z portami o numerach poniżej 1024 zależą od zasad zabezpieczeń obowiązujących w systemie. Na przykład w systemach Mac i Linux aplikacja musi być uruchomiona z uprawnieniami użytkownika root, aby mogła łączyć się z portami o numerach poniżej 1024.
| |
localAddress:String (default = "0.0.0.0 ") — Adres IP na komputerze lokalnym, z którym ma zostać utworzone powiązanie. Może to być adres IPv4 lub IPv6. Jeśli localAddress ma wartość 0.0.0.0 (domyślną), gniazdo nasłuchuje na wszystkich dostępnych adresach IPv4. Aby nasłuchiwać na wszystkich dostępnych adresach IPv6, należy w argumencie localAddress przekazać ciąg znaków "::". Aby można było używać adresów IPv6, komputer i sieć muszą być skonfigurowane do obsługi protokołu IPv6. Ponadto gniazdo powiązane z adresem IPv4 nie może łączyć się z gniazdem o adresie IPv6. Z kolei gniazdo powiązane z adresem IPv6 nie może łączyć się z gniazdem o adresie IPv4. Typy adresów muszą być zgodne.
|
Zgłasza
RangeError — Ten błąd wystąpi, gdy wartość parametru localPort będzie mniejsza od 0 lub większa od 65535.
| |
ArgumentError — Ten błąd występuje, gdy wartość parametru localAddress nie jest poprawnym składniowo adresem IP.
| |
IOError — Ten błąd wystąpi, gdy nie można powiązać gniazda; na przykład, jeśli:
| |
Error — Ten błąd występuje, gdy wartość parametru localAddress nie jest poprawnym adresem lokalnym.
|
Przykład ( Sposób korzystania z tego przykładu )
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 | () | metoda |
public function close():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Zamyka gniazdo.
Gniazdo zostaje odłączone od komputera zdalnego, a jego powiązanie na komputerze lokalnym zostaje usunięte. Zamkniętego gniazda nie można użyć ponownie.
Zgłasza
IOError — Jeśli nie można zamknąć gniazda (z powodu błędu wewnętrznego, sieciowego lub błędu systemu operacyjnego) lub jeśli gniazdo nie jest otwarte.
|
connect | () | metoda |
public function connect(remoteAddress:String, remotePort:int):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Łączy gniazdo z określonym adresem i portem zdalnym.
Gdy gniazdo datagramowe jest „połączone”, pakiety datagramowe mogą być wysyłane i odbierane tylko do/z określonego celu. Pakiety z innych źródeł są ignorowane. Nawiązywanie połączenia dla gniazda datagramowego nie jest wymagane. Jednak nawiązanie połączenia może wyeliminować konieczność filtrowania pakietów z innych źródeł. Należy przy tym pamiętać, że połączenie przez gniazdo UDP nie jest trwałym połączeniem sieciowym (jak w przypadku połączenia TCP). Nie ma nawet pewności, że druga strona połączenia realizowanego przez gniazdo w ogóle istnieje.
Jeśli nie została wywołana metoda bind()
, gniazdo zostaje automatycznie powiązane z domyślnym adresem i portem lokalnym.
Parametry
remoteAddress:String — Adres IP komputera zdalnego, z którym ma zostać nawiązane połączenie. Może to być adres IPv4 lub IPv6. Jeśli nie została wywołana metoda bind() , w domyślnym wywołaniu bind() obowiązuje rodzina adresu remoteAddress , tj. IPv4 albo IPv6,.
| |
remotePort:int — Numer portu na komputerze zdalnym, który ma być użyty do nawiązania połączenia.
|
Zgłasza
RangeError — Ten błąd wystąpi, gdy wartość parametru localPort będzie mniejsza od 1 lub większa od 65535.
| |
ArgumentError — Ten błąd wystąpi, gdy wartość parametru localAddress nie będzie poprawnym składniowo adresem. A także w przypadku użycia domyślnego adresu trasy ('0.0.0.0' lub '::').
| |
IOError — Ten błąd wystąpi, gdy nie można nawiązać połączenia z gniazdem; na przykład, jeśli metoda bind() nie została wywołana przed wywołaniem metody connect() oraz nie jest możliwe zrealizowanie domyślnego powiązania z rodziną adresów zdalnych.
|
receive | () | metoda |
public function receive():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Umożliwia temu obiektowi DatagramSocket odbieranie przychodzących pakietów na powiązanym adresie IP i porcie.
Powrót z funkcji następuje natychmiast. Obiekt DatagramSocket wywołuje zdarzenie data
po odebraniu pakietu danych.
Zdarzenia
data: — Gdy odebrany zostanie pakiet UDP.
|
send | () | metoda |
public function send(bytes:ByteArray, offset:uint = 0, length:uint = 0, address:String = null, port:int = 0):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Wysyła za pośrednictwem protokołu UDP pakiet zawierający bajty przekazane w tablicy ByteArray.
Jeśli gniazdo jest połączone, pakiet jest wysyłany do zdalnego adresu i portu określonego w metodzie connect()
i nie można określić docelowego adresu IP ani portu. Jeśli gniazdo nie jest połączone, pakiet wysyłany jest do określonego adresu i portu, a parametry address
i port
muszą mieć poprawne wartości. Jeśli nie została wywołana metoda bind()
, gniazdo zostaje automatycznie powiązane z domyślnym adresem i portem lokalnym.
Uwaga: Wysyłanie danych na adres rozgłaszania nie jest obsługiwane.
Parametry
bytes:ByteArray — tablica ByteArray zawierająca dane pakietu.
| |
offset:uint (default = 0 ) — Liczone od zera przesunięcie w obiekcie bytes typu ByteArray, od którego zaczyna się pakiet.
| |
length:uint (default = 0 ) — Liczba bajtów w pakiecie. Domyślna wartość 0 powoduje wysłanie całej tablicy ByteArray, rozpoczynając od wartości określonej parametrem offset .
| |
address:String (default = null ) — Adres IPv4 lub IPv6 komputera zdalnego. Adres jest wymagany, jeśli nie określono go już za pomocą metody connect() .
| |
port:int (default = 0 ) — Numer portu na komputerze zdalnym. Wartość większa od 0 i mniejsza od 65536, wymagana jeśli port nie został wcześniej określony za pomocą metody connect() .
|
Zgłasza
RangeError — Ten błąd występuje, gdy wartość parametru port jest mniejsza od 1 lub większa od 65535.
| |
ArgumentError — Jeśli gniazdo nie jest połączone, a parametr address nie jest poprawnym pod względem składniowym adresem IP.
| |
IOError — Ten błąd występuje:
| |
Error — gdy parametr bytes ma wartość null .
| |
RangeError — Jeśli wartość offset jest większa od wartości ByteArray podanej w parametrze bytes lub ilość danych do zapisania wynikająca z wartości offset plus length jest większa od ilości dostępnych danych.
| |
IllegalOperationError — Jeśli określono parametr address lub port , mimo że gniazdo jest już połączone.
|
close | Zdarzenie |
flash.events.Event
właściwość Event.type =
flash.events.Event.CLOSE
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Wywoływane, gdy system operacyjny zamyka to gniazdo.
Zdarzenie close
nie jest wywoływane po wywołaniu metody close()
obiektu DatagramSocket.
Event.CLOSE
definiuje wartość właściwości type
obiektu zdarzenia close
.
To zdarzenie ma następujące właściwości:
Właściwość | Wartość |
---|---|
bubbles | false |
cancelable | false ; nie ma domyślnego zachowania, które można byłoby anulować. |
currentTarget | Obiekt przetwarzający aktywnie obiekt Event za pomocą detektora zdarzeń. |
target | Obiekt, którego połączenie zostało zamknięte. |
data | Zdarzenie |
flash.events.DatagramSocketDataEvent
właściwość DatagramSocketDataEvent.type =
flash.events.DatagramSocketDataEvent.DATA
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Wywoływane, gdy gniazdo odbierze pakiet danych.
Definiuje wartość właściwościtype
obiektu zdarzenia data
.
ioError | Zdarzenie |
flash.events.IOErrorEvent
właściwość IOErrorEvent.type =
flash.events.IOErrorEvent.IOERROR
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2.5 |
Wywoływane, gdy to gniazdo wykryje błąd wejścia/wyjścia.
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, 12:06 PM Z