Basisinformatie over netwerken en communicatie

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Wanneer u toepassingen maakt in Flash Player of AIR, hebt u vaak toegang nodig tot resources buiten uw toepassing. U wilt bijvoorbeeld een aanvraag voor een afbeelding indienen bij een internetwebserver, zodat u de afbeeldingsgegevens ontvangt. Of u wilt misschien objecten met serienummering heen en weer sturen over een socketverbinding met een toepassingsserver. Met de API's van Flash Player en AIR beschikt u over verschillende klassen om uw toepassing te laten deelnemen aan deze gegevensuitwisseling. Deze API's bieden IP-netwerkondersteuning voor verschillende protocollen, zoals UDP, TCP, HTTP, RTMP en RTMFP.

Met de volgende klassen kunt u gegevens over een netwerk verzenden en ontvangen:

Klasse

Ondersteunde gegevensopmaak

Protocollen

Beschrijving

Loader

SWF, PNG, JPEG, GIF

HTTP, HTTPS

Hiermee worden ondersteunde gegevenstypen geladen, waarna de gegevens worden geconverteerd naar een weergaveobject.

Zie Scherminhoud dynamisch laden .

URLLoader

Alle (tekst, XML, binair, enzovoort.)

HTTP, HTTPS

Hiermee worden gegevens met een willekeurige opmaak geladen. Uw toepassing is verantwoordelijk voor de gegevensinterpretatie.

Zie De klasse URLLoader gebruiken

FileReference

Alle

HTTP

Bestanden uploaden en downloaden.

Zie De FileReference-klasse gebruiken

NetConnection

Video, audio, AMF (ActionScript Message Format)

HTTP, HTTPS, RTMP, RTMFP

Hiermee wordt verbinding gemaakt met video, audio en externe objectstreams.

Zie Werken met video .

Sound

Audio

HTTP

Hiermee worden ondersteunde audio-indelingen geladen en afgespeeld.

Zie Externe geluidsbestanden laden .

XMLSocket

XML

TCP

Hiermee worden XML-berichten uitgewisseld met een XMLSocket-server.

Zie XML-sockets .

Socket

Alle

TCP

Hiermee wordt een verbinding gemaakt met een TCP-socketserver

Zie Binaire clientsockets .

SecureSocket (AIR)

Alle

TCP met SSLv3 of TLSv1

Hiermee wordt een verbinding gemaakt met een TCP-socketserver waarvoor SSL- of TLS-beveiliging is vereist.

Zie Beveiligde clientsockets (AIR) .

ServerSocket (AIR)

Alle

TCP

Handelt als een server voor binnenkomende TCP-socketverbindingen.

Zie Serversockets .

DatagramSocket (AIR)

Alle

UDP

Verzendt en ontvangt UDP-pakketten.

Zie UDP-sockets (AIR)

Bij het maken van een webtoepassing is het vaak handig als permanente informatie over de status van de gebruikerstoepassing kan worden opgeslagen. HTML-pagina's en toepassingen gebruiken hiervoor cookies. In Flash Player kunt u hiervoor de SharedObject-klasse gebruiken. Zie Gezamenlijke objecten . (In AIR-toepassingen kunt u ook de SharedObject-klasse gebruiken, maar als u de gegevens opslaat naar een gewoon bestand zijn er minder beperkingen.)

Wanneer uw Flash Player- of AIR-toepassing moet communiceren met een andere Flash Player- of AIR-toepassing op dezelfde computer, kunt u de LocalConnection-klasse gebruiken. Zo kunnen twee (of meer) SWF-bestanden op dezelfde webpagina met elkaar communiceren. Evenzo geldt dat een SWF-bestand dat op een webpagina wordt uitgevoerd, kan communiceren met een AIR-toepassing. Zie Communiceren met andere instanties van Flash Player en AIR .

Wanneer u moet communiceren met andere, niet-SWF-processen op de lokale computer, kunt u de NativeProcess-klasse gebruiken, die is toegevoegd in AIR 2. Met de NativeProcess-klasse kan uw AIR-toepassing communiceren met andere toepassingen en ook dergelijke toepassingen starten. Zie Communiceren met native processen in AIR .

Wanneer u informatie wilt ophalen over de netwerkomgeving van de computer waarop de AIR-toepassing wordt uitgevoerd, kunt u de volgende klassen gebruiken:

  • NetworkInfo: deze klasse biedt informatie over de beschikbare netwerkinterfaces, zoals het IP-adres van de computer. Zie Netwerkinterfaces .

  • DNSResolver: hiermee kunt u DNS-records opzoeken. Zie DNS-records (Domain Name System) .

  • ServiceMonitor: hiermee kunt u de beschikbaarheid van een server nagaan. Zie Servicebewaking .

  • URLMonitor: hiermee kunt u de beschikbaarheid van een resource bij een bepaalde URL controleren. Zie HTTP-bewaking .

  • SocketMonitor en SecureSocketMonitor: hiermee kunt u de beschikbaarheid van een resource bij een socket controleren. Zie Socketbewaking .

Belangrijke concepten en termen

De volgende referentielijst bevat belangrijke termen met betrekking tot het programmeren van netwerk- en communicatiecodes.

Externe gegevens
Gegevens die in een of andere vorm buiten de AIR-toepassing zijn opgeslagen en die wanneer nodig in de toepassing worden geladen. Deze gegevens kunnen zijn opgeslagen in een bestand dat rechtstreeks wordt geladen maar ook in een database of op andere wijze, waarbij ze worden opgehaald door scripts die worden aangeroepen of programma’s die op een server worden uitgevoerd.

URL-gecodeerde variabelen
De URL-gecodeerde indeling biedt een manier om meerdere variabelen (paren van namen en waarden van variabelen) in één tekenreeks weer te geven. Afzonderlijke variabelen worden geschreven in de indeling naam=waarde. Elke waarde (dat wil zeggen elk naam-waardepaar) wordt van de andere waarden gescheiden door het en-teken (&), zoals in het volgende voorbeeld wordt geïllustreerd: variabele1=waarde1&variabele2=waarde2. Zo kan een onbeperkt aantal variabelen worden verzonden als één bericht.

MIME-type
Een standaardcode die wordt gebruikt om het type van een bepaald bestand tijdens internetcommunicatie aan te duiden. Elk bestandstype heeft een specifieke code waarmee dit type wordt aangeduid. Wanneer een bestand of bericht wordt verzonden, geeft de computer (zoals een webserver of de Flash Player- of AIR-instantie van een gebruiker) het type op van het bestand dat wordt verzonden.

HTTP
Hypertext Transfer Protocol - een standaardindeling voor het aanbieden van webpagina's en diverse andere soorten inhoud die via internet worden verzonden.

Aanvraagmethode
Wanneer een toepassing (zoals een AIR-toepassing of een webbrowser) een bericht (een zogenaamde HTTP-aanvraag) naar een webserver verzendt, kunnen eventuele gegevens die worden verzonden, aan de hand van twee methoden in de aanvraag worden ingesloten. Die twee aanvraagmethoden zijn GET en POST. Het programma op de server dat de aanvraag ontvangt, moet in het juiste gedeelte van de aanvraag kijken om de gegevens te vinden. Daarom moet de aanvraagmethode die wordt gebruikt om gegevens te verzenden vanuit uw toepassing, overeenkomen met de aanvraagmethode die wordt gebruikt om die gegevens op de server te lezen.

Socketverbinding
Een blijvende verbinding voor communicatie tussen twee computers.

Uploaden
Een bestand naar een andere computer verzenden.

Downloaden
Een bestand van een andere computer ophalen.

Netwerkinterfaces

U kunt het object NetworkInfo gebruiken om te zien welke hardware- en softwarenetwerkinterfaces beschikbaar zijn voor uw toepassing. Het object NetworkInfo is een singleton -object. U hoeft dit object niet te maken. Gebruik in plaats hiervan de statische klasseneigenschap networkInfo om toegang te krijgen tot het enkele object NetworkInfo. Het object NetworkInfo verzendt eveneens een networkChange -gebeurtenis als er zich een wijziging voordoet in een van de beschikbare interfaces.

Roep de methode findInterfaces() aan om een lijst met NetworkInterface-objecten te zien. Elk NetworkInterface-object in de lijst geeft een beschrijving van een van de beschikbare interfaces. Het NetworkInterface-object geeft informatie over onder meer het IP-adres, het hardwareadres en de maximale verzendeenheid. Ook wordt er aangegeven of de interface actief is of niet.

In het volgende codevoorbeeld worden de NetworkInterface-eigenschappen van elke interface op de clientcomputer getraceerd:

package { 
import flash.display.Sprite; 
import flash.net.InterfaceAddress; 
import flash.net.NetworkInfo; 
import flash.net.NetworkInterface; 
 
public class NetworkInformationExample extends Sprite 
{ 
    public function NetworkInformationExample() 
    { 
        var networkInfo:NetworkInfo = NetworkInfo.networkInfo; 
        var interfaces:Vector.<NetworkInterface> = networkInfo.findInterfaces(); 
         
        if( interfaces != null ) 
        { 
            trace( "Interface count: " + interfaces.length ); 
            for each ( var interfaceObj:NetworkInterface in interfaces ) 
            { 
                trace( "\nname: "             + interfaceObj.name ); 
                trace( "display name: "     + interfaceObj.displayName ); 
                trace( "mtu: "                 + interfaceObj.mtu ); 
                trace( "active?: "             + interfaceObj.active ); 
                trace( "parent interface: " + interfaceObj.parent ); 
                trace( "hardware address: " + interfaceObj.hardwareAddress ); 
                if( interfaceObj.subInterfaces != null ) 
                { 
                    trace( "# subinterfaces: " + interfaceObj.subInterfaces.length ); 
                } 
                trace("# addresses: "     + interfaceObj.addresses.length ); 
                for each ( var address:InterfaceAddress in interfaceObj.addresses ) 
                { 
                    trace( "  type: "           + address.ipVersion ); 
                    trace( "  address: "         + address.address ); 
                    trace( "  broadcast: "         + address.broadcast ); 
                    trace( "  prefix length: "     + address.prefixLength ); 
                } 
            }             
        } 
    }     
} 
}

Raadpleeg de volgende bronnen voor meer informatie:

Wijzigingen in netwerkconnectiviteit

Uw AIR-toepassing kan worden uitgevoerd in omgevingen met een onzekere of veranderende netwerkconnectiviteit. Om de verbindingen met online bronnen beter te kunnen beheren, verstuurt Adobe AIR de gebeurtenis network change wanneer een netwerkverbinding beschikbaar of onbeschikbaar wordt. De gebeurtenis networkChange wordt verzonden door zowel het NetworkInfo-object als het NativeApplication-object van de toepassing. Om op deze gebeurtenis te kunnen reageren, voegt u een listener toe:

NetworkInfo.networkInfo.addEventListener(Event.NETWORK_CHANGE, onNetworkChange); 

Vervolgens definieert u een gebeurtenishandlerfunctie:

function onNetworkChange(event:Event) 
{ 
    //Check resource availability 
} 

De networkChange -gebeurtenis geeft geen wijziging in alle netwerkactiviteit aan, maar alleen dat er een netwerkverbinding is gewijzigd. AIR probeert niet om de betekenis van de netwerkwijziging te interpreteren. Een computer in een netwerk kan vele reële en virtuele verbindingen hebben. Het verlies van een verbinding betekent dus niet noodzakelijk dat een resource verloren is gegaan. Anderzijds waarborgen nieuwe verbindingen ook geen betere beschikbaarheid van de resources. Soms kan een nieuwe verbinding zelfs de toegang blokkeren tot resources die voordien beschikbaar waren (bijvoorbeeld wanneer verbinding wordt gemaakt met een VPN).

Een toepassing kan alleen bepalen of deze verbinding kan maken met een externe resource door dit daadwerkelijk te proberen. Het framework voor servicebewaking biedt aan een opgegeven host een op gebeurtenissen gebaseerd middel om te reageren op wijzigingen in netwerkconnectiviteit.

Opmerking: Het framework voor servicebewaking detecteert of een server op een aanvaardbare wijze reageert op een aanvraag. Een succesvolle controle garandeert geen volledige connectiviteit. Schaalbare webservices maken vaak gebruik van cachevoorzieningen en systemen om de belasting te verdelen, ten einde verkeer om te leiden naar een cluster van webservers. In deze situatie zorgen serviceproviders slechts voor een gedeeltelijke diagnose van de netwerkconnectiviteit.

Servicebewaking

Het framework voor servicebewaking staat los van het AIR-framework en bevindt zich in het bestand aircore.swc. Om het AIR-framework te kunnen gebruiken, moet het bestand aircore.swc zijn opgenomen in uw ontwikkelingsproces.

Adobe® Flash® Builder sluit deze bibliotheek automatisch in.

De klasse ServiceMonitor implementeert het framework voor de bewaking van netwerkservices en levert de basisfunctionaliteit voor de servicebewaking. Een instantie van de klasse ServiceMonitor verstuurt standaard gebeurtenissen met betrekking tot de netwerkconnectiviteit. Het ServiceMonitor-object verzendt deze gebeurtenissen als een instantie wordt gemaakt en als er door de runtime een netwerkwijziging wordt vastgesteld. Bovendien kunt u de eigenschap pollInterval van een ServiceMonitor-instantie instellen om de connectiviteit in een bepaald interval (in milliseconden) te controleren, ongeacht algemene gebeurtenissen betreffende de netwerkconnectiviteit. Een ServiceMonitor-object controleert de netwerkconnectiviteit pas als de methode start() is opgeroepen.

De klasse URLMonitor, een subklasse van de klasse ServiceMonitor, detecteert wijzigingen in de HTTP-connectiviteit voor een opgegeven URLRequest.

De klasse SocketMonitor, eveneens een subklasse van de klasse ServiceMonitor, detecteert wijzigingen in de connectiviteit met een opgegeven host op een opgegeven poort.

Opmerking: Vóór AIR 2 is het servicecontroleframework gepubliceerd in de bibliotheek servicemonitor.swc. Deze bibliotheek is nu verouderd. Gebruik in plaats hiervan de bibliotheek aircore.swc.

Flash CS4 en CS5 Professional

Ga als volgt te werk om deze klassen te gebruiken Adobe® Flash® CS4 of CS5 Professional:

  1. Kies de opdracht Bestand > Instellingen publiceren.

  2. Klik op de knop Instellingen voor ActionScript 3.0. Selecteer Bibliotheekpad.

  3. Klik op de knop Bladeren naar SWC-bestand en blader naar de map AIK in de installatiemap van Flash Professional.

  4. In deze map staan de bestanden /frameworks/libs/air/aircore.swc (voor AIR 2) of /frameworks/libs/air/servicemonitor.swc (voor AIR 1.5).

  5. Klik op de knop OK.

  6. Voeg de volgende import-instructie toe aan de ActionScript 3.0-code:
    import air.net.*;

Flash CS3 Professional

Als u deze klassen in Adobe® Flash® CS3 Professional wilt gebruiken, moet u eerst de component ServiceMonitorShim vanuit het deelvenster Componenten naar de bibliotheek slepen. Voeg daarna de volgende import -instructie aan uw ActionScript 3.0-code toe:

import air.net.*;

HTTP-bewaking

De klasse URLMonitor bepaalt of HTTP-aanvragen kunnen worden ingediend via een bepaald adres op poort 80 (de typische poort voor HTTP-communicatie). De volgende code gebruikt een instantie van de klasse URLMonitor om connectiviteitswijzigingen in de Adobe-website te detecteren:

import air.net.URLMonitor; 
import flash.net.URLRequest; 
import flash.events.StatusEvent; 
var monitor:URLMonitor; 
monitor = new URLMonitor(new URLRequest('http://www.example.com')); 
monitor.addEventListener(StatusEvent.STATUS, announceStatus); 
monitor.start(); 
function announceStatus(e:StatusEvent):void { 
    trace("Status change. Current status: " + monitor.available); 
}

Socketbewaking

AIR-toepassingen kunnen ook socketverbindingen gebruiken voor push-model connectiviteit. Om veiligheidsredenen beperken firewalls en netwerkrouters doorgaans de netwerkcommunicatie via ongeoorloofde poorten. Daarom moeten ontwikkelaars er rekening mee houden dat gebruikers niet altijd socketverbindingen tot stand kunnen brengen.

De volgende code gebruikt een instantie van de klasse SocketMonitor om connectiviteitswijzigingen in een socketverbinding te detecteren. De bewaakte poort is 6667, een veelgebruikte poort voor IRC:

import air.net.ServiceMonitor; 
import flash.events.StatusEvent; 
 
socketMonitor = new SocketMonitor('www.example.com',6667); 
socketMonitor.addEventListener(StatusEvent.STATUS, socketStatusChange); 
socketMonitor.start(); 
 
function announceStatus(e:StatusEvent):void { 
    trace("Status change. Current status: " + socketMonitor.available); 
} 

Als de socketserver een beveiligde verbinding vereist, kunt u de SecureSocketMonitor-klasse gebruiken in plaats van SocketMonitor.

DNS-records (Domain Name System)

U kunt DNS-bronrecords opzoeken aan de hand van de klasse DNSResolver. DNS-bronrecords bieden informatie zoals het IP-adres van een domeinnaam en de domeinnaam van een IP-adres. U kunt de volgende DNS-bronrecordtypen opzoeken:

  • ARecord - IPv4-adres voor een host.

  • AAAARecord - IPv6-adres voor een host.

  • MXRecord - mailuitwisselingsrecord voor een host.

  • PTRRecord - hostnaam voor een IP-adres.

  • SRVRecord - servicerecord voor een service..

Als u een record wilt opzoeken, geeft u een querytekenreeks en het klassenobject dat het recordtype representeert, door aan de methode lookup() van het DNSResolver-object. De te gebruiken querytekenreeks is afhankelijk van het recordtype:

Recordklasse

Querytekenreeks

Voorbeeldquerytekenreeks

ARecord

hostnaam

“example.com”

AAAARecord

hostnaam

“example.com”

MXRecord

hostnaam

“example.com”

PTRRecord

IP-adres

“208.77.188.166”

SRVRecord

Service-id: _service._protocol.host

“_sip._tcp.example.com”

In het volgende codevoorbeeld wordt het IP-adres van de host "example.com" opgezocht.

package 
{ 
    import flash.display.Sprite; 
    import flash.events.DNSResolverEvent; 
    import flash.events.ErrorEvent; 
    import flash.net.dns.ARecord; 
    import flash.net.dns.DNSResolver; 
 
    public class DNSResolverExample extends Sprite 
    { 
         
        public function DNSResolverExample() 
        { 
            var resolver:DNSResolver = new DNSResolver(); 
            resolver.addEventListener( DNSResolverEvent.LOOKUP, lookupComplete ); 
            resolver.addEventListener( ErrorEvent.ERROR, lookupError ); 
 
            resolver.lookup( "example.com.", ARecord ); 
        } 
         
        private function lookupComplete( event:DNSResolverEvent ):void 
        { 
            trace( "Query string: " + event.host ); 
            trace( "Record count: " + event.resourceRecords.length ); 
            for each( var record:* in event.resourceRecords ) 
            { 
                if( record is ARecord ) trace( record.address ); 
            } 
             
        } 
 
        private function lookupError( error:ErrorEvent ):void 
        { 
            trace("Error: " + error.text ); 
        } 
    } 
}

Raadpleeg de volgende bronnen voor meer informatie: