Pakiet | flash.net |
Klasa | public class ServerSocket |
Dziedziczenie | ServerSocket 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ść ServerSocket.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.
Serwer TCP nasłuchuje połączeń przychodzących z klientów zdalnych/ Gdy klient próbuje się połączyć, obiekt ServerSocket wywołuje zdarzenie connect
. Wywoływany obiekt zdarzenia ServerSocketConnectEvent udostępnia obiekt Socket reprezentujący połączenie TCP między serwerem a klientem. Tego obiektu Socket należy używać w dalszej komunikacji z klientem. W razie potrzeby z obiektu Socket można odczytać adres i numer portu klienta.
Uwaga: aplikacja użytkownika jest odpowiedzialna za utrzymanie odwołania do obiektu Socket na kliencie. W przeciwnym wypadku obiekt będzie podlegał czyszczeniu pamięci i może zostać zniszczony przez środowisko wykonawcze bez żadnego ostrzeżenia.
Aby przełączyć obiekt ServerSocket w stan nasłuchiwania, należy wywołać metodę listen()
. W stanie nasłuchiwania obiekt gniazda serwera wywołuje zdarzenie connect
za każdym razem, gdy klient korzystający z protokołu TCP próbuje połączyć się z powiązanym adresem i portem. Obiekt ServerSocket nadal nasłuchuje dodatkowych połączeń, dopóki nie zostanie wywołana metoda close()
.
Połączenia TCP są trwałe — połączenie istnieje, dopóki jedna ze stron go nie zamknie (chyba że wystąpi poważny błąd lub awaria sieci). Wszelkie dane przesyłane za pośrednictwem połączenia są dzielone na pakiety i składane z tych pakietów na drugim końcu połączenia. Dotarcie wszystkich pakietów do celu jest gwarantowane (w racjonalnych granicach) — utracone pakiety są wysyłane ponownie. Z reguły protokół TCP lepiej niż UDP zarządza dostępnym pasmem (przepustowością) sieci. Większość aplikacji AIR, które muszą komunikować się przez gniazda, powinna używać klas ServerSocket i Socket, a nie klasy DatagramSocket.
Klasa ServerSocket 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.
Powiązane elementy interfejsu API
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
bound : Boolean [tylko do odczytu]
Wskazuje, czy to gniazdo jest powiązane z lokalnym adresem i portem. | ServerSocket | ||
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 ServerSocket są obsługiwane w środowisku wykonawczym. | ServerSocket | ||
listening : Boolean [tylko do odczytu]
Wskazuje, czy gniazdo serwera wykrywa połączenia przychodzące. | ServerSocket | ||
localAddress : String [tylko do odczytu]
Adres IP, pod którym gniazdo nasłuchuje. | ServerSocket | ||
localPort : int [tylko do odczytu]
Port, na którym gniazdo wykrywa połączenia. | ServerSocket |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
Tworzy obiekt ServerSocket. | ServerSocket | ||
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. | ServerSocket | ||
Zamyka gniazdo i zaprzestaje nasłuchiwania połączeń. | ServerSocket | ||
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 | ||
Inicjuje wykrywanie połączeń TCP na powiązanym adresie IP i porcie. | ServerSocket | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Usuwa detektor z obiektu EventDispatcher. | EventDispatcher | ||
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. | ServerSocket | |||
Wywoływane, gdy zdalne gniazdo próbuje połączyć się z tym gniazdem serwera. | ServerSocket | |||
[zdarzenie broadcast] Wywoływane, gdy program Flash Player lub aplikacja AIR traci fokus w systemie operacyjnym i przechodzi w stan nieaktywny. | EventDispatcher |
bound | właściwość |
isSupported | właściwość |
listening | właściwość |
localAddress | właściwość |
localPort | właściwość |
ServerSocket | () | Konstruktor |
public function ServerSocket()
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Tworzy obiekt ServerSocket.
Zgłasza
SecurityError — Ten błąd występuje, jeśli treść wywołująca działa poza obszarem izolowanym aplikacji AIR.
|
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.
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 — gdy nie można powiązać gniazda, na przykład w następujących sytuacjach:
|
close | () | metoda |
public function close():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Zamyka gniazdo i zaprzestaje wykrywania połączeń.
Nie można ponownie otwierać zamkniętych gniazd. Zamiast tego należy utworzyć nowe wystąpienie klasy ServerSocket.
Zgłasza
Error — Ten błąd występuje, jeśli zamknięcie gniazda nie jest możliwe lub gniazdo nie było otwarte.
|
listen | () | metoda |
public function listen(backlog:int = 0):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Inicjuj nasłuchiwanie połączeń TCP na powiązanym adresie IP i porcie.
Powrót z metody listen()
następuje natychmiast. Po wywołaniu metody listen()
obiekt ServerSocket wywołuje zdarzenie connect
przy każdej próbie nawiązania połączenia. Właściwość socket
obiektu zdarzenia ServerSocketConnectEvent odwołuje się do obiektu Socket reprezentującego połączenie między klientem a serwerem.
Parametr backlog
określa, ile oczekujących połączeń zostanie zapisanych w kolejce w czasie, gdy zdarzenia connect
są przetworzone prze aplikację. Gdy kolejka będzie pełna, następne próby połączeń spotkają się z odmową i nie będą dla nich wywoływane zdarzenia connect
. W wypadku określenia wartości domyślnej równej zero przyjmowana jest maksymalna długość kolejki obowiązująca w systemie. Długość zależy od platformy i może być konfigurowana dla każdego komputera indywidualnie. Jeśli określona wartość przekracza maksymalną długość obowiązującą w systemie, przyjmowane jest maksimum systemowe. Nie ma możliwości odczytania rzeczywistej długości kolejki. (Wartość maksymalna obowiązująca w systemie jest określona przez ustawienie SOMAXCONN podsystemu sieciowego TCP na hoście).
Parametry
backlog:int (default = 0 ) — Maksymalna długość kolejki połączeń oczekujących. Jeśli backlog ma wartość 0, długość kolejki ustawiana jest na maksymalną wartość obowiązującą w systemie.
|
Zgłasza
IOError — Ten błąd występuje, jeśli gniazdo nie jest otwarte lub powiązane. Ten błąd występuje, jeśli wywołanie metody listen() kończy się niepowodzeniem z dowolnej innej przyczyny.
| |
RangeError — Ten błąd występuje, jeśli parametr backlog jest mniejszy od zera.
|
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 ServerSocket. Jeśli inny obiekt w tej samej aplikacji oczekuje zdarzenia close
, można ręcznie wywołać to zdarzenie, wywołując metodę close()
.
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. |
connect | Zdarzenie |
flash.events.ServerSocketConnectEvent
właściwość ServerSocketConnectEvent.type =
flash.events.ServerSocketConnectEvent.CONNECT
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 2 |
Wywoływane, gdy gniazdo zdalne próbuje połączyć się z tym gniazdem serwera.
Definiuje wartość właściwościtype
obiektu zdarzenia ServerSocketConnectEvent
.
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 | Ten obiekt ServerSocket. |
target | Ten obiekt ServerSocket. |
socket | Obiekt Socket reprezentuje nowe połączenie. |
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.events.ProgressEvent; import flash.events.ServerSocketConnectEvent; import flash.net.ServerSocket; import flash.net.Socket; import flash.text.TextField; import flash.text.TextFieldType; import flash.utils.ByteArray; public class ServerSocketExample extends Sprite { private var serverSocket:ServerSocket = new ServerSocket(); private var clientSocket:Socket; private var localIP:TextField; private var localPort:TextField; private var logField:TextField; private var message:TextField; public function ServerSocketExample() { setupUI(); } private function onConnect( event:ServerSocketConnectEvent ):void { clientSocket = event.socket; clientSocket.addEventListener( ProgressEvent.SOCKET_DATA, onClientSocketData ); log( "Connection from " + clientSocket.remoteAddress + ":" + clientSocket.remotePort ); } private function onClientSocketData( event:ProgressEvent ):void { var buffer:ByteArray = new ByteArray(); clientSocket.readBytes( buffer, 0, clientSocket.bytesAvailable ); log( "Received: " + buffer.toString() ); } private function bind( event:Event ):void { if( serverSocket.bound ) { serverSocket.close(); serverSocket = new ServerSocket(); } serverSocket.bind( parseInt( localPort.text ), localIP.text ); serverSocket.addEventListener( ServerSocketConnectEvent.CONNECT, onConnect ); serverSocket.listen(); log( "Bound to: " + serverSocket.localAddress + ":" + serverSocket.localPort ); } private function send( event:Event ):void { try { if( clientSocket != null && clientSocket.connected ) { clientSocket.writeUTFBytes( message.text ); clientSocket.flush(); log( "Sent message to " + clientSocket.remoteAddress + ":" + clientSocket.remotePort ); } else log("No socket connection."); } 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 { localIP = createTextField( 10, 10, "Local IP", "0.0.0.0"); localPort = createTextField( 10, 35, "Local port", "0" ); createTextButton( 170, 60, "Bind", bind ); message = createTextField( 10, 85, "Message", "Lucy can't drink milk." ); createTextButton( 170, 110, "Send", send ); logField = createTextField( 10, 135, "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 = 100; 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