Grundlagen zu Netzwerken und Kommunikation

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Bei der Erstellung von Anwendungen in Flash Player oder AIR müssen Sie häufig auf Ressourcen zugreifen, die sich außerhalb der Anwendung befinden. Beispielsweise senden Sie eine Bildanforderung an einen Webserver im Internet und erhalten die Bilddaten als Rückgabe. Oder Sie senden serialisierte Objekte über eine Socketverbindung mit einem Anwendungsserver hin und zurück. Die APIs für Flash Player und AIR bieten mehrere Klassen, über die Ihre Anwendungen an diesem Informationsaustausch teilnehmen können. Diese APIs unterstützen IP-Netzwerke mit Protokollen wie UDP, TCP, HTTP, RTMP und RTMFP.

Mit den folgenden Klassen können Daten über ein Netzwerk gesendet und empfangen werden:

Klasse

Unterstützte Datenformate

Protokolle

Beschreibung

Loader

SWF, PNG, JPEG, GIF

HTTP, HTTPS

Lädt unterstützte Datentypen und konvertiert die Daten in ein Anzeigeobjekt.

Siehe Dynamisches Laden von Anzeigeinhalten .

URLLoader

Alle (Text, XML, binär usw.)

HTTP, HTTPS

Lädt beliebige Datenformate. Die Daten müssen von Ihrer Anwendung interpretiert werden.

Siehe Verwenden der URLLoader-Klasse .

FileReference

Alle

HTTP

Dient zum Hoch- und Herunterladen von Dateien.

Siehe Verwenden der FileReference-Klasse .

NetConnection

Video, Audio, ActionScript Message Format (AMF)

HTTP, HTTPS, RTMP, RTMFP

Stellt Verbindungen mit Video-, Audio- und Remote-Objektstreams her.

Siehe Verwenden von Videos .

Sound

Audio

HTTP

Dient zum Laden und Abspielen von unterstützten Audioformaten.

Siehe Laden von externen Sounddateien .

XMLSocket

XML

TCP

Tauscht XML-Nachrichten mit einem XMLSocket-Server aus.

Siehe XML-Sockets .

Socket

Alle

TCP

Stellt eine Verbindung mit einem TCP-Socket-Server her.

Siehe Binäre Clientsockets .

SecureSocket (AIR)

Alle

TCP mit SSL V3 oder TLS V1

Stellt eine Verbindung mit einem TCP-Socket-Server her, der SSL- oder TLS-Sicherheit erfordert.

Siehe Sichere Clientsockets (AIR) .

ServerSocket (AIR)

Alle

TCP

Dient als Server für eingehende TCP-Socketverbindungen.

Siehe Serversockets .

DatagramSocket (AIR)

Alle

UDP

Sendet und empfängt UDP-Pakete.

Siehe UDP-Sockets (AIR) .

Bei der Erstellung einer Webanwendung ist es häufig ratsam, persistente Informationen über den Anwendungsstatus des Benutzers zu speichern. HTML-Seiten und -Anwendungen verwenden dazu normalerweise Cookies. In Flash Player können Sie zu diesem Zweck auch die SharedObject-Klasse verwenden. Siehe Gemeinsame Objekte . (Die SharedObject-Klasse kann in AIR-Anwendungen verwendet werden, es gelten jedoch weniger Einschränkungen, wenn die Daten einfach in einer regulären Datei gespeichert werden.)

Wenn Ihre Flash Player- oder AIR-Anwendung mit einer anderen Flash Player- oder AIR-Anwendung auf demselben Computer kommunizieren muss, können Sie die LocalConnection-Klasse verwenden. Beispielsweise können zwei (oder mehr) SWF-Dateien auf derselben Webseite miteinander kommunizieren. Genauso kann auch eine SWF-Datei, die in einer Webseite ausgeführt wird, mit einer AIR-Anwendung kommunizieren. Siehe Kommunikation mit anderen Flash Player- und AIR-Instanzen .

Zur Kommunikation mit anderen Prozessen (nicht SWF) auf dem lokalen Computer können Sie die NativeProcess-Klasse verwenden, die ab AIR 2 zur Verfügung steht. Über die NativeProcess-Klasse können Ihre AIR-Anwendungen andere Anwendungen starten und mit ihnen kommunizieren. Siehe Kommunikation mit nativen Prozessen in AIR .

Wenn Sie Informationen über die Netzwerkumgebung des Computers benötigen, auf dem eine AIR-Anwendung ausgeführt wird, können Sie die folgenden Klassen verwenden:

  • NetworkInfo – Liefert Informationen über die verfügbaren Netzwerkschnittstellen, wie beispielsweise die IP-Adresse des Computers. Siehe Netzwerkschnittstellen .

  • DNSResolver – Ermöglicht Ihnen die Suche nach DNS-Datensätzen. Siehe DNS-Datensätze .

  • ServiceMonitor – Hiermit können Sie die Verfügbarkeit eines Servers überwachen. Siehe Dienstüberwachung .

  • URLMonitor – Hiermit können Sie die Verfügbarkeit einer Ressource an einer bestimmten URL überwachen. Siehe HTTP-Überwachung .

  • SocketMonitor und SecureSocketMonitor – Hiermit können Sie die Verfügbarkeit einer Ressource an einem Socket überwachen. Siehe Socketüberwachung .

Wichtige Konzepte und Begriffe

In der folgenden Referenzliste sind wichtige Begriffe aufgeführt, die Ihnen beim Programmieren von Netzwerk- und Kommunikationscode begegnen:

Externe Daten
Daten, die in irgendeiner Form außerhalb der Anwendung gespeichert sind und bei Bedarf in die Anwendung geladen werden. Diese Daten können in einer Datei gespeichert werden, die direkt geladen wird, oder in einer Datenbank oder in einer anderen Form, die durch Aufrufen von Skripts oder das Ausführen von Programmen auf einem Server abgerufen wird.

URL-kodierte Variablen
Im URL-kodierten Format können mehrere Variablen (Paare aus Variablennamen und -werten) in einem Textstring dargestellt werden. Einzelne Variablen werden im Format „Name=Wert“ geschrieben. Die Variablen (d. h. die Name-Wert-Paare) sind durch Und-Zeichen voneinander getrennt: Variable1=Wert1&Variable2=Wert2. Auf diese Weise kann eine unbegrenzte Anzahl von Variablen in einer Nachricht gesendet werden.

MIME-Typ
Ein Standardcode, mit dem der Typ einer Datei bei der Internet-Kommunikation identifiziert wird. Jeder Dateityp weist einen bestimmten Code auf, der zu seiner Identifikation dient. Beim Senden einer Datei oder einer Nachricht gibt ein Computer (z. B. ein Webserver oder die Flash Player- oder AIR-Instanz eines Benutzers) den Typ der gesendeten Datei an.

HTTP
Hypertext Transfer Protocol - ein Standardformat für die Bereitstellung von Webseiten und verschiedenen anderen Inhaltstypen, die über das Internet gesendet werden.

Anforderungsmethode
Wenn eine Anwendung (zum Beispiel eine AIR-Anwendung oder ein Webbrowser) eine Nachricht (eine sogenannte HTTP-Anforderung) an einen Webserver sendet, können alle mit dieser Anforderung gesendeten Daten auf eine von zwei Arten eingebettet werden. Entsprechend gibt es die beiden Anforderungsmethoden GET und POST. Auf dem Server muss das Programm, das die Anforderung empfängt, den entsprechenden Teil der Anforderung untersuchen, um die Daten zu finden. Daher muss die zum Senden der Daten aus Ihrer Anwendung verwendete Anforderungsmethode der Anforderungsmethode entsprechen, die auf dem Server zum Lesen der Daten verwendet wird.

Socketverbindung
Eine permanente Kommunikationsverbindung zwischen zwei Computern.

Hochladen
Das Senden einer Datei an einen anderen Computer.

Herunterladen
Das Empfangen einer Datei von einem anderen Computer.

Netzwerkschnittstellen

Mithilfe des NetworkInfo-Objekts können Sie die Hardware- und Softwareschnittstellen ermitteln, die für Ihre Anwendung zur Verfügung stehen. Das NetworkInfo-Objekt ist ein singleton -Objekt; Sie müssen kein solches Objekt erstellen. Verwenden Sie stattdessen die statische Klasseneigenschaft networkInfo , um auf das einzelne NetworkInfo-Objekt zuzugreifen. Das NetworkInfo-Objekt löst auch ein networkChange -Ereignis aus, wenn eine der verfügbaren Schnittstellen sich ändert.

Rufen Sie die findInterfaces() -Methode auf, um eine Liste der NetworkInterface-Objekte abzurufen. Jedes NetworkInterface-Objekt in der Liste beschreibt eine der verfügbaren Schnittstellen. Das NetworkInterface-Objekt bietet Informationen wie die IP-Adresse, Hardwareadresse und maximale Übertragungseinheit. Weiterhin gibt es an, ob die Schnittstelle aktiv ist.

Mit dem folgenden Codebeispiel werden die NetworkInterface-Eigenschaften jeder Schnittstelle auf dem Clientcomputer verfolgt:

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 ); 
                } 
            }             
        } 
    }     
} 
}

Weitere Informationen finden Sie unter:

Änderungen an Netzwerkverbindungen

Die AIR-Anwendung kann in Umgebungen mit unsicheren und sich ändernden Netzwerkverbindungen ausgeführt werden. Adobe AIR unterstützt eine Anwendung bei der Verwaltung von Verbindungen zu Onlineressourcen durch Senden eines Netzwerkänderungsereignisses, wenn der Status einer Netzwerkverbindung zu verfügbar oder nicht verfügbar wechselt. Sowohl das NetworkInfo-Objekt als auch das NativeApplication-Objekt der Anwendung lösen das networkChange -Ereignis aus. Fügen Sie einen Listener hinzu, um auf dieses Ereignis reagieren zu können:

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

Definieren Sie ferner eine Ereignisprozedurfunktion:

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

Das networkChange -Ereignis weist nicht auf eine Änderung der gesamten Netzwerkaktivität hin, sondern nur darauf, dass sich eine einzelne Netzwerkverbindung geändert hat. AIR unternimmt keinen Versuch, die Bedeutung der Netzwerkänderung zu interpretieren. Ein vernetzter Computer kann über zahlreiche reale und virtuelle Verbindungen verfügen. Der Verlust einer Verbindung führt nicht zwangsläufig zum Verlust einer Ressource. Andererseits sind neue Verbindungen auch keine Garantie für eine bessere Ressourcenverfügbarkeit. Manchmal kann eine neue Verbindung sogar den Zugriff auf zuvor verfügbare Ressourcen blockieren (z. B. beim Zugreifen auf ein VPN).

Im Allgemeinen kann eine Anwendung nur herausfinden, ob eine Verbindung zu einer Remoteressource hergestellt werden kann, indem sie versucht, die Verbindung herzustellen. Die Dienstüberwachungsarchitektur bietet eine ereignisgestützte Methode, auf Änderungen der Netzwerkverbindung mit einem bestimmten Host zu reagieren.

Hinweis: Die Dienstüberwachungsarchitektur erkennt, ob ein Server auf akzeptable Weise auf eine Anforderung reagiert. Eine erfolgreiche Prüfung gewährleistet keine vollständige Konnektivität. Skalierbare Webdienste verwenden häufig Applicances mit Cachefunktion oder Lastausgleich, um Datenverkehr an einen Webservercluster umzuleiten. In diesem Fall bieten Dienstanbieter nur eine teilweise Diagnose der Netzwerkverbindung.

Dienstüberwachung

Die von der AIR-Architektur separate Dienstüberwachungsarchitektur befindet sich in der Datei „aircore.swc“. Die Architektur kann nur verwendet werden, wenn der Generierungsprozess die Datei „aircore.swc“ umfasst.

Bei Adobe® Flash® Builder ist diese Bibliothek automatisch enthalten.

Die ServiceMonitor-Klasse implementiert die Architektur zum Überwachen von Netzwerkdiensten und bietet grundlegende Funktionen für die Dienstüberwachung. Eine Instanz der ServiceMonitor-Klasse löst standardmäßig Ereignisse in Bezug auf die Netzwerkverbindung aus. Das ServiceMonitor-Objekt löst diese Ereignisse aus, wenn die Instanz erstellt wird und wenn die Laufzeit eine Netzwerkänderung erkennt. Sie können darüber hinaus festlegen, dass die pollInterval -Eigenschaft einer ServiceMonitor-Instanz die Verbindung unabhängig von allgemeinen Netzwerkverbindungsereignissen in regelmäßigen Abständen in Millisekunden prüft. Ein ServiceMonitor-Objekt prüft die Netzwerkverbindung erst beim Aufrufen der start() -Methode.

Die URLMonitor-Klasse, eine Unterklasse der ServiceMonitor-Klasse, erkennt Änderungen bei der HTTP-Verbindung für ein bestimmtes URLRequest.

Die SocketMonitor-Klasse, ebenfalls eine Unterklasse der ServiceMonitor-Klasse, erkennt Änderungen bei der Verbindung mit einem bestimmten Host an einem bestimmten Port.

Hinweis: Vor AIR 2 wurde die Dienstüberwachungsarchitektur in der Bibliothek „servicemonitor.swc“ veröffentlicht. Diese Bibliothek ist nun veraltet. Verwenden Sie stattdessen die Bibliothek „aircore.swc“.

Flash CS4 und CS5 Professional

So verwenden Sie diese Klassen in Adobe® Flash® CS4 oder CS5 Professional:

  1. Wählen Sie „Datei“ > „Einstellungen für Veröffentlichungen“.

  2. Klicken Sie auf die Schaltfläche „Einstellungen“ für ActionScript 3.0. Wählen Sie „Bibliothekspfad“.

  3. Klicken Sie auf „Nach SWC-Datei suchen“ und navigieren Sie zum AIK-Ordner im Installationsordner von Flash Professional.

  4. Suchen Sie in diesem Ordner nach /frameworks/libs/air/aircore.swc (für AIR 2) oder /frameworks/libs/air/servicemonitor.swc (für AIR 1.5).

  5. Klicken Sie auf „OK“.

  6. Fügen Sie dem ActionScript 3.0-Code die folgende Import-Anweisung hinzu:
    import air.net.*;

Flash CS3 Professional

Um diese Klassen in Adobe® Flash® CS3 Professional zu verwenden, ziehen Sie die ServiceMonitorShim-Komponente aus dem Bedienfeld „Komponenten“ in das Bedienfeld „Bibliothek“. Fügen Sie dann die folgende import -Anweisung in den ActionScript 3.0-Code ein:

import air.net.*;

HTTP-Überwachung

Die URLMonitor-Klasse ermittelt, ob HTTP-Anforderungen an einer bestimmten Adresse an Port 80 (dem regulären Port für HTTP-Kommunikation) gestellt werden können. Der folgende Code verwendet eine Instanz der URLMonitor-Klasse, um Verbindungsänderungen zur Adobe-Website zu erkennen:

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); 
}

Socketüberwachung

AIR-Anwendungen können auch Socketverbindungen für Push-Model-Verbindungen verwenden. Firewalls und Netzwerkrouter beschränken die Netzwerkkommunikation an nicht autorisierten Ports normalerweise aus Sicherheitsgründen. Deshalb müssen Entwickler in Erwägung ziehen, dass Benutzer nicht immer die Möglichkeit haben, Socketverbindungen herzustellen.

Der folgende Code verwendet eine Instanz der SocketMonitor-Klasse, um Änderungen an einer Socketverbindung zu erkennen. Der überwachte Port ist 6667, der häufig für IRC verwendet wird:

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); 
} 

Wenn der Socket-Server eine sichere Verbindung erfordert, können Sie die SecureSocketMonitor-Klasse anstelle von SocketMonitor verwenden.

DNS-Datensätze

DNS-Ressourcendatensätze (DNS = Domain Name System) können mithilfe der DNSResolver-Klasse ermittelt werden. DNS-Ressourcendatensätze bieten Informationen wie die IP-Adresse eines Domänennamens und den Domänennamen einer IP-Adresse. Sie können folgende Arten von DNS-Ressourcendatensätzen ermitteln:

  • ARecord – IPv4-Adresse für einen Host.

  • AAAARecord – IPv6-Adresse für einen Host.

  • MXRecord – E-Mail-Datensatz für einen Host.

  • PTRRecord – Hostname für eine IP-Adresse.

  • SRVRecord – Dienstdatensatz für einen Dienst..

Zum Ermitteln eines Datensatzes übergeben Sie einen Abfragestring und das Klassenobjekt für den jeweiligen Datensatztyp an die lookup() -Methode des DNSResolver-Objekts. Der verwendete Abfragestring richtet sich nach dem Typ des Datensatzes:

Record-Klasse

Abfragestring

Beispiel für Abfragestring

ARecord

Hostname

“example.com”

AAAARecord

Hostname

“example.com”

MXRecord

Hostname

“example.com”

PTRRecord

IP-Adresse

“208.77.188.166”

SRVRecord

Dienstbezeichner: _service._protocol.host

“_sip._tcp.example.com”

Mit dem folgenden Codebeispiel wird die IP-Adresse des Hosts „example.com“ ermittelt.

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 ); 
        } 
    } 
}

Weitere Informationen finden Sie unter: