Пакет | flash.net |
Класс | public class ServerSocket |
Наследование | ServerSocket EventDispatcher Object |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Поддержка в профилях AIR. Эта функция поддерживается во всех компьютерных операционных системах, в iOS (начиная с версии AIR 3.8) и на устройствах Android (начиная с версии AIR 3.8). Данная возможность не поддерживается на устройствах AIR for TV. Используйте свойство ServerSocket.isSupported
, чтобы проверить наличие поддержки в среде выполнения. Дополнительные сведения о поддержке API-интерфейса в разных профилях см. в разделе «Поддержка в профилях AIR».
Сервер TCP прослушивает входящие подключения от удаленных клиентов. Когда клиент пытается подключиться, объект ServerSocket отправляет событие connect
. Объект ServerSocketConnectEvent, отправленный для события, передает объект Socket, который представляет собой подключение TCP между сервером и клиентом. Используйте этот объект Socket на протяжении последующего обмена данными с клиентом. При необходимости из объекта Socket можно получить клиентский адрес и порт.
Примечание. Приложение должно поддерживать ссылку на клиентский объект Socket. В противном случае объект подлежит сборке мусора и может быть без предупреждения уничтожен во время выполнения.
Чтобы перевести объект ServerSocket в состояние прослушивания, вызовите метод listen()
. В состоянии прослушивания объект ServerSocket отправляет события connect
каждый раз, когда клиент, использующий протокол TCP пытается подключиться к связанному адресу и порту. Объект ServerSocket продолжает прослушивать дополнительные подключения, пока не будет вызван метод close()
.
Подключения TCP являются постоянными: они существуют, пока одна сторона подключения не закрывает его (или пока не происходит серьезный сетевой сбой). Все данные, отправляемые по подключению, разбиваются на пакеты, пригодные для передачи, а затем повторно собираются на другом конце. Гарантируется получение всех пакетов (в пределах разумного): потерянные пакеты передаются повторно. Как правило, протокол TCP управляет пропускной способностью сети лучше, чем протокол UDP. Для большинства приложений AIR, которые требуют связи через сокеты, следует использовать классы ServerSocket и Socket, а не класс DatagramSocket.
Класс ServerSocket можно использовать только в приложениях Adobe AIR и только в изолированной среде безопасности приложения.
Дополнительные сведения о безопасности см. в разделе центра разработчиков Flash Player Безопасность.
Связанные элементы API
Свойство | Определено | ||
---|---|---|---|
bound : Boolean [только для чтения]
Указывает, связан ли данный сокет с локальным адресом и портом. | ServerSocket | ||
constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | ||
isSupported : Boolean [статические] [только для чтения]
Указывает, поддерживаются ли функции ServerSocket в среде выполнения. | ServerSocket | ||
listening : Boolean [только для чтения]
Указывает, прослушивает ли сокет сервера входящие подключения. | ServerSocket | ||
localAddress : String [только для чтения]
IP-адрес, по которому находится прослушивающий сокет. | ServerSocket | ||
localPort : int [только для чтения]
Порт, на котором находится прослушивающий сокет. | ServerSocket |
Метод | Определено | ||
---|---|---|---|
Создает объект ServerSocket. | ServerSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Регистрирует объект прослушивателя события на объекте EventDispatcher для получения прослушивателем уведомления о событии. | EventDispatcher | ||
Связывает этот сокет с указанным локальным адресом и портом. | ServerSocket | ||
Закрывает сокет и прекращает прослушивание подключений. | ServerSocket | ||
Посылает событие в поток событий. | EventDispatcher | ||
Проверяет, имеет ли объект EventDispatcher прослушиватели, зарегистрированные для определенного типа события. | EventDispatcher | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Инициирует прослушивание подключения TCP связанного IP-адреса и порта. | ServerSocket | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Удаляет прослушиватель из объекта EventDispatcher. | EventDispatcher | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Возвращает элементарное значение заданного объекта. | Object | ||
Проверяет, зарегистрирован ли прослушиватель события для указанного типа события с данным объектом EventDispatcher или любым его предшественником. | EventDispatcher |
Событие | Сводка | Определено | ||
---|---|---|---|---|
[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR перемещается в фокус операционной системы и становится активным. | EventDispatcher | |||
Отправляется, когда операционная система закрывает данный сокет. | ServerSocket | |||
Отправляется, когда удаленный сокет пытается подключиться к этому сокету сервера. | ServerSocket | |||
[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR теряет фокус системы и становится неактивным. | EventDispatcher |
bound | свойство |
isSupported | свойство |
listening | свойство |
localAddress | свойство |
localPort | свойство |
ServerSocket | () | Конструктор |
public function ServerSocket()
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Создает объект ServerSocket.
Выдает
SecurityError — Эта ошибка происходит, если содержимое, вызывающее метод, выполняется за пределами изолированной среды безопасности приложения AIR.
|
bind | () | метод |
public function bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Связывает этот сокет с указанным локальным адресом и портом.
Параметры
localPort:int (default = 0 ) — Номер связываемого порта на локальном компьютере. Если localPort имеет значение 0 (по умолчанию), связывается следующий доступный системный порт. Разрешение на подключение к порту с номером меньше 1024 предоставляется в соответствии с политикой безопасности системы. Например, в ОС Mac и Linux приложение должно работать с правами доступа к корневому каталогу, чтобы иметь возможность подключения к портам с номерами меньше 1024.
| |
localAddress:String (default = "0.0.0.0 ") — IP-адрес на связываемом локальном компьютере. Может использоваться адрес версии IPv6 или IPv4. Если свойство localAddress имеет значение 0.0.0.0 (по умолчанию), сокет прослушивает все доступные адреса IPv4. Чтобы прослушивать все доступные адреса IPv6, необходимо указать «::» в качестве аргумента localAddress . Для использования адреса IPv6 в компьютере и сети должна быть включена поддержка IPv6. Кроме того, сокет, связанный с адресом IPv4, не может подключиться к сокету с адресом IPv6. По аналогии, сокет, связанный с адресом IPv6, не может подключиться к сокету с адресом IPv4. Тип адреса должен быть одинаковым.
|
Выдает
RangeError — Эта ошибка происходит, когда значение свойства localPort меньше чем 0 или больше чем 65535.
| |
ArgumentError — Эта ошибка происходит, когда свойство localAddress содержит синтаксически неправильный IP-адрес.
| |
IOError — когда не удается связать сокет, например, в следующих случаях.
|
close | () | метод |
public function close():void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Закрывает сокет и прекращает прослушивание подключений.
Закрытые сокеты нельзя открыть повторно. Создайте новый экземпляр ServerSocket.
Выдает
Error — Эта ошибка происходит, если сокет не удалось закрыть или он не был открыт.
|
listen | () | метод |
public function listen(backlog:int = 0):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Инициирует прослушивание подключения TCP связанного IP-адреса и порта.
Метод listen()
сразу возвращает ответ. После вызова метода listen()
объект ServerSocket отправляет событие connect
при каждой попытке соединения. Свойство socket
объекта события ServerSocketConnectEvent ссылается на объект Socket, который представляет собой подключение между сервером и клиентом.
Параметр backlog
определяет, сколько ожидающий подключений добавляется в очередь, пока приложение обрабатывает события connect
. Если очередь заполнена, дополнительные подключения отклоняются, и событие connect
не отправляется. Если задано значение по умолчанию, 0, то используется определенная в системе максимальная длина очереди. Эта длина варьируется в зависимости от платформы, и может быть индивидуально настроена для каждого компьютера. Если указанное значение превышает системную максимальную длину, то используется системное значение. Определить фактически используемое значение backlog невозможно. (Системное максимальное значение определено параметром SOMAXCONN подсистемы сети TCP на компьютере хоста.)
Параметры
backlog:int (default = 0 ) — Максимальная длина очереди ожидающих подключений. Если backlog имеет значение 0, в качестве длины очереди задается максимальное системное значение
|
Выдает
IOError — Эта ошибка происходит, если сокет не открыт или связан. Эта ошибка также происходит, если вызов listen() не выполняется по любой другой причине.
| |
RangeError — Эта ошибка происходит, если значение параметра backlog меньше нуля.
|
close | Событие |
flash.events.Event
свойство Event.type =
flash.events.Event.CLOSE
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Отправляется, когда операционная система закрывает данный сокет.
Событие close
не отправляется при вызове метода close()
класса ServerSocket. Если другие объекты в приложении прослушивают событие close
, его можно отправить вручную перед вызовом метода close()
.
Event.CLOSE
определяет значение свойства type
объекта события close
.
Это событие имеет следующие свойства:
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; поведение по умолчанию, подлежащее отмене, не определено. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
target | Объект, для которого разорвано подключение. |
connect | Событие |
flash.events.ServerSocketConnectEvent
свойство ServerSocketConnectEvent.type =
flash.events.ServerSocketConnectEvent.CONNECT
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Отправляется, когда удаленный сокет пытается подключиться к этому сокету сервера.
Задает значение свойстваtype
для объекта события ServerSocketConnectEvent
.
Это событие имеет следующие свойства:
Свойство | Значение |
---|---|
bubbles | false . |
cancelable | false ; поведение по умолчанию, подлежащее отмене, не определено. |
currentTarget | Этот объект ServerSocket. |
target | Этот объект ServerSocket. |
socket | Объект Socket, представляющий новое подключение. |
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, 11:34 AM Z