Pacote | flash.net |
Classe | public class DatagramSocket |
Herança | DatagramSocket EventDispatcher Object |
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 2 |
Suporte para perfil AIR: este recurso é suportado em todos os sistemas operacionais para desktop, no iOS (iniciando com o AIR 3.8) e no Android (iniciando com o AIR 3.8). Esse recurso não é compatível no AIR em aparelhos de TV. Você pode testar o suporte que em tempo de execução utilizando a propriedadeDatagramSocket.isSupported
. Consulte Suporte a perfil do AIR para obter mais informações sobre o suporte de API através de múltiplos perfis.
Os pacotes de datagrama são individualmente transmitidos entre a origem e o destino. Os pacotes podem chegar em uma ordem diferente do que eles foram despachados. Os pacotes perdidos na transmissão não são retransmitidos nem detectados.
Os dados despachados por meio de um soquete de datagrama não são divididos automaticamente em pacotes com um tamanho que pode ser transmitido. Se você enviar um pacote UDP que excede o tamanho da unidade de transmissão máxima (MTU), a rede descarta o pacote (sem avisar). A MTU limite é a menor MTU de qualquer interface, comutador ou roteador que esteja no caminho de transmissão. Você pode usar a classe NetworkInterface para determinar a MTU da interface local, mas os outros nós da rede podem ter valores diferentes de MTU.
A classe Socket usa TCP, que proporciona entrega garantida dos pacotes e divide e remonta pacotes grandes automaticamente. O TCP também proporciona um melhor gerenciamento da largura de banda da rede. Estes recursos fazem com que os dados despachados por meio de um soquete de TCP tenham uma latência mais alta, mas, na maioria dos casos, a relação custo/benefício do TCP é muito favorável. A maior parte de comunicação de rede deve usar a classe Socket em vez da classe DatagramSocket.
A classe DatagramSocket é útil para trabalhar com aplicativos nos quais é importante ter latência de transmissão pequena e a perda de pacotes é tolerável. Por exemplo: operações de rede em aplicativos de voz sobre IP (VoIP) e jogos multiplayer em tempo real frequentemente podem beneficiar-se com o UDP. A classe DatagramSocket também é útil para alguns aplicativos do lado do servidor. Já que o UDP é um protocolo sem informações de estado, o servidor consegue processar mais solicitações de mais clientes, em comparação com o que ele faria se usasse o TCP.
A classe DatagramSocket só pode ser usada em aplicativos Adobe AIR e somente na caixa de proteção do aplicativo.
Para obter mais informações relacionadas à segurança, consulte o tópico do Centro dos desenvolvedores do Flash Player Security.
Saiba mais
Elementos da API relacionados
Propriedade | Definido por | ||
---|---|---|---|
bound : Boolean [somente leitura]
Indica se este objeto de soquete está vinculado atualmente a uma porta e a um endereço local. | DatagramSocket | ||
connected : Boolean [somente leitura]
Indica se esse objeto de soquete está atualmente conectado a um endereço remoto e porta. | DatagramSocket | ||
constructor : Object
Uma referência ao objeto de classe ou à função de construtor de uma determinada ocorrência de objeto. | Object | ||
isSupported : Boolean [estático] [somente leitura]
Indica se os recursos de DatagramSocket são suportados no meio de tempo de execução. | DatagramSocket | ||
localAddress : String [somente leitura]
O endereço IP deste soquete está vinculado à máquina local. | DatagramSocket | ||
localPort : int [somente leitura]
A porta deste soquete está vinculada à máquina local. | DatagramSocket | ||
remoteAddress : String [somente leitura]
O endereço IP da máquina remota à qual este soquete está conectado. | DatagramSocket | ||
remotePort : int [somente leitura]
A porta na máquina remota à qual este soquete está conectado. | DatagramSocket |
Método | Definido por | ||
---|---|---|---|
Cria um objeto DatagramSocket. | DatagramSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registra um objeto de ouvinte de evento em um objeto EventDispatcher, de forma que o ouvinte receba a notificação de um evento. | EventDispatcher | ||
Vincula este soquete à porta e ao endereço local especificado. | DatagramSocket | ||
Fecha o soquete. | DatagramSocket | ||
Conecta o soquete à porta e ao endereço remoto especificado. | DatagramSocket | ||
Envia um evento para o fluxo de eventos. | EventDispatcher | ||
Verifica se o objeto EventDispatcher tem ouvintes registrados para um tipo específico de evento. | EventDispatcher | ||
Indica se um objeto tem uma propriedade especificada definida. | Object | ||
Indica se uma ocorrência da classe Object está na cadeia de protótipos do objeto especificado como o parâmetro. | Object | ||
Indica se a propriedade especificada existe e é enumerável. | Object | ||
Permite que este objeto DatagramSocket receba entrada de pacotes nos limites de um endereço e de uma porta IP. | DatagramSocket | ||
Remove um ouvinte do objeto EventDispatcher. | EventDispatcher | ||
Envia o pacote que contém os bytes no ByteArray por meio do UDP. | DatagramSocket | ||
Define a disponibilidade de uma propriedade dinâmica para operações de repetição. | Object | ||
Retorna a representação da string deste objeto, formatado segundo as convenções específicas para a localidade. | Object | ||
Retorna a representação de string do objeto especificado. | Object | ||
Retorna o valor primitivo do objeto especificado. | Object | ||
Verifica se um ouvinte de evento está registrado nesse objeto EventDispatcher ou em qualquer um de seus ancestrais para o tipo de evento especificado. | EventDispatcher |
Evento | Resumo | Definido por | ||
---|---|---|---|---|
[transmissão de evento] Despachado quando o Flash Player ou o aplicativo do AIR ganha o foco do sistema operacional e está se tornando inativo. | EventDispatcher | |||
Despachado quando o sistema operacional fecha este soquete. | DatagramSocket | |||
Despachado quando este soquete recebe um pacote de dados. | DatagramSocket | |||
[transmissão de evento] Despachado quando o Flash Player ou o aplicativo do AIR perde o foco do sistema operacional e está se tornando inativo. | EventDispatcher | |||
Despachado quando este soquete recebe um erro de E/S. | DatagramSocket |
bound | propriedade |
connected | propriedade |
connected:Boolean
[somente leitura] Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 2 |
Indica se esse objeto de soquete está atualmente conectado a um endereço remoto e porta.
Observe: Um valor true
não significa que um computador remoto está escutando no endereço conectado e porta. Ele só significa que este objeto de DataGramSocket só enviará dados a ou receberá dados daquele endereço e porta.
Implementação
public function get connected():Boolean
Elementos da API relacionados
isSupported | propriedade |
localAddress | propriedade |
localPort | propriedade |
remoteAddress | propriedade |
remotePort | propriedade |
DatagramSocket | () | Construtor |
public function DatagramSocket()
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 2 |
Cria um objeto DatagramSocket.
Lança
SecurityError — Se o conteúdo fora da caixa de proteção do aplicativo AIR tenta criar um objeto de DatagramSocket.
|
bind | () | método |
public function bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 2 |
Vincula este soquete à porta e ao endereço local especificado.
O método bind()
é executado de forma síncrona. A operação de vinculação é concluída antes da execução da linha de código seguinte.
Parâmetros
localPort:int (default = 0 ) — O número da porta a ser vinculada no computador local. Se localPort é definida como 0 (padrão), a porta de sistema seguinte que estiver disponível é vinculada. A permissão para se conectar a um número de porta inferior a 1024 está sujeita à política de segurança do sistema. Em sistemas Mac e Linux, por exemplo, o aplicativo deve estar em execução com privilégios de raiz para se conectar a portas inferiores a 1024.
| |
localAddress:String (default = "0.0.0.0 ") — O endereço IP na máquina local ao qual será vinculado. Este endereço pode ser IPv6 ou IPv4. Se localAddress for definido como 0.0.0.0 (o padrão), o soquete ouvirá todos o endereços IPv4 disponíveis. Para ouvir em todos os endereços IPv6 disponíveis, você deve especificar "::" como o argumento localAddress . Para usar um endereço IPv6, o computador e a rede devem estar configurados para dar suporte a IPv6. Além disso, um soquete vinculado a um endereço IPv4 não pode se conectar a um soquete com endereço IPv6. Da mesma forma, um soquete vinculado à um endereço IPv6 não pode se conectar a um soquete com um endereço IPv4. O tipo de endereço deve ser correspondente.
|
Lança
RangeError — Este erro ocorre quando localPort é menor do que 0 ou maior do que 65535.
| |
ArgumentError — Este erro ocorre quando localAddress não é um endereço IP bem estruturado sintaticamente.
| |
IOError — Este erro ocorrerá se o soquete não puder ser vinculado, tal como quando:
| |
Error — Este erro ocorre quando localAddress não é um endereço local válido.
|
Exemplo ( Como usar este exemplo )
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 | () | método |
public function close():void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 2 |
Fecha o soquete.
O soquete é desconectado da máquina remota e desvinculado da máquina local. Não é possível reutilizar um soquete fechado.
Lança
IOError — Se o soquete não puder ser fechado (por causa de um erro interno, de rede ou de sistema operacional) ou se o soquete não estiver aberto.
|
connect | () | método |
public function connect(remoteAddress:String, remotePort:int):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 2 |
Conecta o soquete à porta e ao endereço remoto especificado.
Quando um soquete de datagrama está "connected", os pacotes de datagrama só podem ser despachados a um destino especificado e recebidos deste destino. Os pacotes de outras origens são ignorados. Não é necessário conectar um soquete de datagrama. O estabelecimento de uma conexão pode eliminar a necessidade de filtrar pacotes não relacionados provenientes de outras origens. Contudo, uma conexão de soquete de UDP não é uma conexão de rede persistente (como é a conexão de TCP). É possível que o fim remoto do soquete não exista.
Se o método bind()
não é chamado, o soquete é vinculado automaticamente à porta e ao endereço local padrão.
Parâmetros
remoteAddress:String — O endereço IP da máquina remota com a qual se vai estabelecer a conexão. Este endereço pode ser IPv6 ou IPv4. Se bind() não foi chamado, a família de endereços de remoteAddress , IPv4 ou IPv6, é usada ao chamar o bind() padrão.
| |
remotePort:int — O número da porta na máquina remota usada para estabelecer uma conexão.
|
Lança
RangeError — Este erro ocorre quando localPort é menor do que 1 ou maior do que 65535.
| |
ArgumentError — Este erro ocorre quando localAddress não é um endereço sintaticamente válido. Ou quando um endereço de rota padrão ('0.0.0.0' ou '::') é usado.
| |
IOError — Este erro ocorrerá se o soquete não puder ser conectado, tal como quando bind() não foi invocado antes da chamada connect() e o vínculo padrão à família de endereços remota não for possível.
|
receive | () | método |
public function receive():void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 2 |
Permite que este objeto DatagramSocket receba entrada de pacotes nos limites de um endereço e de uma porta IP.
A função retorna imediatamente. O objeto DatagramSocket envia um evento data
quando um pacote de dados é recebido.
Eventos
data: — Quando um pacote de UDP é recebido.
|
send | () | método |
public function send(bytes:ByteArray, offset:uint = 0, length:uint = 0, address:String = null, port:int = 0):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 2 |
Envia o pacote que contém os bytes no ByteArray por meio do UDP.
Se o soquete estiver conectado, o pacote será despachado ao endereço remoto e à porta especificada no método connect()
e nenhuma porta ou endereço IP de destino poderá ser especificado. Se o soquete estiver conectado, o pacote será despachado ao endereço e à porta de conexão e você deverá fornecer valores válidos para address
e port
. Se o método bind()
não é chamado, o soquete é vinculado automaticamente à porta e ao endereço local padrão.
Observação: que Envia dados a um endereço de transmissão não é suportado.
Parâmetros
bytes:ByteArray — um ByteArray que contém os dados de pacote.
| |
offset:uint (default = 0 ) — O deslocamento baseado em zero no objeto ByteArray bytes no qual o pacote começa.
| |
length:uint (default = 0 ) — O número de bytes no pacote. O valor padrão de 0 faz com que o ByteArray inteiro seja gravado, começando no valor especificado pelo parâmetro offset .
| |
address:String (default = null ) — O IPv4 ou endereço IPv6 da máquina remota. Um endereço será necessário se um já não tiver sido especificado usando o método conectam() .
| |
port:int (default = 0 ) — O número de porta na máquina remota. Um valor maior do que 0 e menos de 65536 são necessitados se a portinhola de conexão já não tenha sido especificada usando o connect() .
|
Lança
RangeError — Este erro ocorre quando port é menor do que 1 ou maior do que 65535.
| |
ArgumentError — Se o soquete não estiver conectado e address não for um endereço IP bem estruturado.
| |
IOError — Este erro ocorre:
| |
Error — quando o parâmetro bytes é null .
| |
RangeError — Se offset for maior do que o comprimento do ByteArray especificado em bytes ou se a quantidade de dados especificados para ser gravado por offset mais lenght excede os dados disponíveis.
| |
IllegalOperationError — Se o parâmetro address ou port é especificado quando o soquete já foi conectado.
|
close | Evento |
flash.events.Event
propriedade Event.type =
flash.events.Event.CLOSE
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 2 |
Despachado quando o sistema operacional fecha este soquete.
O evento close
não é atribuído quando o método close()
de DatagramSocket é chamado.
Event.CLOSE
define o valor da propriedade type
de um objeto de evento close
.
Esse evento tem as seguintes propriedades:
Propriedade | Valor |
---|---|
bubbles | false |
cancelable | false ; não há comportamento padrão a ser cancelado. |
currentTarget | O objeto que está processando ativamente o objeto Event com um ouvinte de evento. |
target | O objeto cuja conexão foi fechada. |
data | Evento |
flash.events.DatagramSocketDataEvent
propriedade DatagramSocketDataEvent.type =
flash.events.DatagramSocketDataEvent.DATA
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 2 |
Despachado quando este soquete recebe um pacote de dados.
Define o valor da propriedadetype
de um objeto de evento data
.
ioError | Evento |
flash.events.IOErrorEvent
propriedade IOErrorEvent.type =
flash.events.IOErrorEvent.IOERROR
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | AIR 2.5 |
Despachado quando este soquete recebe um erro de E/S.
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:10 AM Z