Ağ iletişimi ve iletişim temelleri

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Flash Player veya AIR’de uygulamalar oluştururken, çoğunlukla uygulamanızın dışındaki kaynaklara erişme ihtiyacı duyarsınız. Örneğin, bir görüntü için İnternet web sunucusuna talep gönderebilir ve karşılığında görüntü verilerini alabilirsiniz. Ya da bir uygulama sunucusuyla bağlantısı bulunan priz bağlantısı üzerinden ileri-geri seri nesneler gönderebilirsiniz. Flash Player ve AIR API’leri, uygulamanızın bu alışverişe katılmasına izin veren birçok sınıf sağlar. Bu API’ler UDP, TCP, HTTP, RTMP ve RTMFP gibi iletişim kuralları için IP tabanlı ağ kurmayı destekler.

Bir ağ boyunca veri gönderip almak için aşağıdaki sınıflar kullanılabilir:

Sınıf

Desteklenen veri biçimleri

İletişim kuralları

Açıklama

Loader

SWF, PNG, JPEG, GIF

HTTP, HTTPS

Desteklenen veri türlerini yükler ve verileri bir görüntüleme nesnesine dönüştürür.

Bkz. Görüntüleme içeriğini dinamik olarak yükleme.

URLLoader

Herhangi biri (metin, XML, ikili, vs.)

HTTP, HTTPS

Gelişigüzel veri biçimleri yükler. Uygulamanız verileri yorumlamaktan sorumludur.

Bkz. URLLoader sınıfını kullanma

FileReference

Herhangi bir

HTTP

Dosyaları yükler ve indirir.

Bkz. FileReference sınıfını kullanma

NetConnection

Video, ses, ActionScript Mesaj Biçimi (AMF)

HTTP, HTTPS, RTMP, RTMFP

Video, ses ve uzak nesne akışlarına bağlanır.

Bkz. Videoyla çalışma.

Ses

Ses

HTTP

Desteklenen ses biçimlerini yükler ve oynatır.

Bkz. Harici ses dosyalarını yükleme.

XMLSocket

XML

TCP

XMLSocket sunucusuyla XML mesajı alışverişi yapar.

Bkz. XML soketleri.

Socket

Herhangi bir

TCP

Bir TCP soket sunucusuna bağlanır.

Bkz. İkili istemci soketleri.

SecureSocket (AIR)

Herhangi bir

SSLv3 veya TLSv1’e sahip TCP

SSL veya TLS güvenliği gerektiren bir TCP soket sunucusuna bağlanır.

Bkz. Güvenli istemci soketleri (AIR).

ServerSocket (AIR)

Herhangi bir

TCP

Gelen TCP soket bağlantıları için sunucu olarak hareket eder.

Bkz. Sunucu soketleri.

DatagramSocket (AIR)

Herhangi bir

UDP

UDP paketleri gönderip alır.

Bkz. UDP soketleri (AIR)

Çoğu zaman, bir web uygulaması oluştururken kullanıcının uygulama durumu hakkında kalıcı bilgiler depolamak faydalıdır. HTML sayfaları ve uygulamaları bu amaçla tipik olarak çerezler kullanır. Flash Player’da, aynı amaç için SharedObject sınıfını kullanabilirsiniz. Bkz. Paylaşılan nesneler. (SharedObject sınıfı AIR uygulamalarında kullanılabilir, ancak düzenli bir dosyaya sadece veri kaydederken daha az sınırlama mevcuttur.)

Flash Player veya AIR uygulamasının aynı bilgisayardaki başka bir Flash Player veya AIR uygulamasıyla iletişim kurması gerekirse, LocalConnection sınıfını kullanabilirsiniz. Örneğin, aynı web sayfasındaki iki (veya daha fazla) SWF, birbiriyle iletişim kurabilir. Benzer şekilde, bir web sayfasında çalışan SWF bir AIR uygulamasıyla iletişim kurabilir. Bkz. Diğer Flash Player ve AIR örneklerine bağlanma.

Yerel bilgisayardaki SWF dışı diğer işlemlerle iletişim kurmanız gerektiğinde, AIR 2’ye eklenen NativeProcess sınıfını kullanın. NativeProcess sınıfı AIR uygulamanızın başlamasına ve diğer uygulamalarla iletişim kurmasına imkan verir. Bkz. AIR uygulamasında yerel işlemlere bağlanma

AIR uygulamasının çalışmakta olduğu bilgisayarın ağ ortamı hakkında bilgiye ihtiyaç duyduğunuzda, aşağıdaki sınıfları kullanabilirsiniz:

  • NetworkInfo—Kullanılabilir ağ arabirimleri hakkında bilgisayarın IP adresi gibi bilgiler sağlar. Bkz. Ağ arabirimleri.

  • DNSResolver—DNS kayıtlarına bakmanıza imkan verir. Bkz. DNS (Alan Adı Sistemi) kayıtları.

  • ServiceMonitor—Bir sunucunun kullanılabilirliğini izlemenize imkan verir. Bkz. Hizmet izleme.

  • URLMonitor—Bir kaynağın belli bir URL’deki kullanılabilirliğini izlemenize imkan verir. Bkz. HTTP izleme.

  • SocketMonitor ve SecureSocketMonitor—Bir kaynağın bir soketteki kullanılabilirliğini izlemenize imkan verir. Bkz. Soket izleme.

Önemli kavramlar ve terimler

Aşağıdaki başvuru listesi ağ ve iletişim kodu programlarken karşılaşacağınız önemli terimleri içerir.

Harici veriler
Uygulamanın dışında belirli bir şekilde saklanan ve gerektiğinde uygulamaya yüklenen veriler. Bu veriler, doğrudan yüklenen bir dosyada saklanabildiği gibi, bir sunucuda çalıştırılan komut dosyaları veya programların çağrılmasıyla alınan bir veritabanında ya da başka bir formda saklanabilir.

URL olarak kodlanmış değişkenler
URL olarak kodlanmış biçim, çeşitli değişkenleri (değişken ad ve değer çiftleri) tek bir metin dizesi halinde temsil etmenin bir yolunu sunar. Ayrı ayrı değişkenler name=value biçiminde yazılır. Her değişken (her ad-değer çifti) ampersan karakteri tarafından şu şekilde ayrılır: variable1=value1&variable2=value2. Bu şekilde, sonsuz sayıda değişken tek bir mesaj olarak gönderilebilir.

MIME türü
Belirli bir İnternet iletişimi dosyasının türünü tanımlamak için kullanılan standart bir kod. Her dosya, kendisini tanımlamak için kullanılan belirli bir kod içerir. Dosya veya mesaj gönderilirken, bilgisayar (örn. web sunucusu veya kullanıcının Flash Player ya da AIR örneği) gönderilen dosya türünü belirtir.

HTTP
Köprü Metni Aktarım Protokolü—web sayfalarını ve Internet üzerinden gönderilen diğer çeşitli içerik türlerini dağıtmak için standart biçim.

İstek yöntemi
Bir uygulama (bir AIR uygulaması veya bir web tarayıcısı gibi) web sunucusuna mesaj (HTTP isteği adı verilir) gönderdiğinde, gönderilen tüm veriler iki yöntemden biri kullanılarak isteğe gömülebilir; bunlar GET ve POST olmak üzere iki istek yöntemidir. Sunucu ucunda, isteği alan programın verileri bulmak için isteğin ilgili bölümüne bakması gerekir, bu nedenle uygulamanızdan veri göndermek için kullanılan istek yönteminin, sunucuda o veriyi okumak için kullanılan istek yöntemiyle eşleşmesi gerekir.

Soket bağlantısı
İki bilgisayar arasındaki iletişim için kalıcı bir bağlantı.

Karşıya yükleme
Başka bir bilgisayara dosya gönderme.

İndirme
Başka bir bilgisayardan dosya alma.

Ağ arabirimleri

NetworkInfo nesnesini uygulamanızda kullanabileceğiniz mevcut donanım ve yazılım ağlarını keşfetmek için kullanabilirsiniz. NetworkInfo nesnesi bir singleton nesnesidir. Bu nedenle bir tane oluşturmanıza gerek yoktur. NetworkInfo nesnesine ulaşmak için onun yerine networkInfo statik sınıf özelliğini kullanın. NetworkInfo nesnesi ayrıca, kullanılabilir arabirimlerden biri değiştiğinde networkChange olayı gönderir.

NetworkInterface nesnelerinin listesi içinfindInterfaces() yöntemini çağırın. Listedeki her Each NetworkInterface nesnesi kullanılabilir arabirimlerden birini tanımlar. NetworkInterface nesnesi IP adresi, donanım adresi, maksimum iletim birimi ve arabirimin etkin olup olmadığıyla ilgili bilgiler sağlar.

Aşağıdaki kod örneği, istemci bilgisayarın her arabiriminin NetworkInterface özelliklerini izler:

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

Daha fazla bilgi için bkz.:

Ağ bağlanabilirliği değişimleri

AIR uygulamanız, güvenli olmayan ve değişken ağ bağlantıları içeren ortamlarda çalışabilir. Adobe AIR, bir uygulamanın çevrimiçi kaynaklara yönelik bağlantıları yönetmesine yardımcı olmak için, ağ bağlantısının her kullanılabilir veya kullanılamaz oluşunda bir ağ değişikliği olayı gönderir. Hem NetworkInfo nesnesi hem de uygulamanın NativeApplication nesnesi, networkChange olayını gönderir. Bu olaya tepki vermek için bir dinleyici ekleyin:

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

Ve bir olay işleyici işlevi tanımlayın:

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

networkChange olayı, tüm ağ etkinliğinde gerçekleşen bir değişikliği değil, yalnızca bir ağ bağlantısının değiştiğini gösterir. AIR, ağ değişikliğinin anlamını yorumlamaya çalışmaz. Ağa bağlı bir bilgisayar birçok gerçek ve sanal bağlantıya sahip olabilir. Bu nedenle bir bağlantının kaybedilmesi, kaynağın kaybedilmesi anlamına gelmeyebilir. Diğer yandan, yeni bağlantılar da iyileştirilmiş kaynak kullanılabilirliğini garanti etmez. Bazen yeni bir bağlantı, önceden kullanılabilir olan bir kaynağa erişimi bloke bile edebilir (örneğin VPN'e bağlanıldığında).

Genellikle, bir uygulamanın uzak bir kaynağa bağlanıp bağlanamayacağını belirlemenin tek yolu, denemektir. Hizmet izleme çerçevesi, ağ bağlanabilirliğindeki değişikliklere yanıt vermek için belirli bir ana bilgisayara olay bazlı araçlar sağlar.

Not: Servis izleme çerçevesi, sunucunun bir isteği kabul edilebilir biçimde yanıtlayıp yanıtlamadığını saptar. Başarılı bir denetim, tam bağlanabilirliği garanti etmez. Ölçeklenebilir web servisleri, trafiği bir dizi web sunucusuna yönlendirmek için genellikle önbelleğe alma ve yük dengeleme gereçlerini kullanır. Bu durumda, servis sağlayıcıları ağ bağlantısına ilişkin yalnızca kısmi bir tanı sağlar.

Hizmet izleme

Servis izleme çerçevesi, AIR çerçevesinden ayrı olarak aircore.swc dosyasında bulunur. Çerçeveyi kullanmak için, aircore.swc dosyası, inşa etme işlemine dahil edilmelidir.

Adobe® Flash® Builder bunu otomatik olarak dahil eder.

ServiceMonitor sınıfı, ağ servislerinin izlenmesi için çerçeveyi uygular ve servis izlemeleri için temel işlevler sağlar. Varsayılan olarak, bir ServiceMonitor sınıfı örneği, ağ bağlantısına ilişkin olaylar gönderir. ServiceMonitor nesnesi bu olayları, örnek oluşturulduğunda ve çalışma zamanının bir ağ değişimi algıladığı zamanlarda gönderir. Ayrıca, genel ağ bağlantısı olaylarına bakılmaksızın milisaniye cinsinden belirli bir aralıkta bağlantıyı kontrol etmek için ServiceMonitor örneğinin pollInterval özelliğini ayarlayabilirsiniz. ServiceMonitor nesnesi, start() yöntemi çağrılana kadar ağ bağlantısını kontrol etmez.

ServiceMonitor sınıfının alt sınıfı olan URLMonitor sınıfı, belirli bir URLRequest için HTTP bağlantısındaki değişiklikleri saptar.

ServiceMonitor sınıfının başka bir alt sınıfı olan SocketMonitor sınıfı ise, belirli bir bağlantı noktasındaki belirli bir ana bilgisayara ilişkin bağlantıdaki değişiklikleri saptar.

Not: AIR 2'den önce, servis izleme çerçevesi servicemonitor.swc kütüphanesinde yayınlanıyordu. Bu kütüphane artık çıkartılmıştır. Onun yerine aircore.swc kütüphanesini kullanın.

Flash CS4 ve CS5 Professional

Bu sınıfları Adobe® Flash® CS4 veya CS5 Professional'da kullanmak için:

  1. File > Yayınlama ayarları komutunu seçin.

  2. ActionScript 3.0 için Ayarlar düğmesini tıklatın. Kütüphane Yolu'nu seçin.

  3. SWC'ye Gözat'ı tıklatın ve Flash Professional yükleme klasöründeki AIK klasörüne göz atın.

  4. Bu klasörde, /frameworks/libs/air/aircore.swc (AIR 2 için) veya /frameworks/libs/air/servicemonitor.swc (AIR 1.5 için) öğesini bulun.

  5. Tamam düğmesini tıklatın.

  6. Aşağıdaki içe aktarma ifadesini ActionScript 3.0 kodunuza ekleyin:
    import air.net.*;

Flash CS3 Professional

Adobe® Flash® CS3 Professional'da bu sınıfları kullanmak için ServiceMonitorShim bileşenini Bileşenler panelinden Kütüphane öğesine sürükleyin ve daha sonra aşağıdaki import ifadesini ActionScript 3.0 kodunuza ekleyin:

import air.net.*;

HTTP izleme

URLMonitor sınıfı, bağlantı noktası 80'de (HTTP iletişimi için tipik bağlantı noktası) belirli bir adrese HTTP isteklerinin yapılıp yapılamayacağını belirler. Aşağıdaki kod, Adobe web sitesindeki bağlantı değişikliklerini saptamak için bir URLMonitor sınıfı örneğini kullanır:

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

Soket izleme

AIR uygulamaları, itme modeli bağlanabilirliği için soket bağlantıları da kullanabilir. Güvenlik duvarları ve ağ yönlendiricileri, güvenlik nedenleriyle genellikle yetkisiz bağlantı noktalarındaki ağ iletişimini kısıtlar. Bu nedenle geliştiriciler, kullanıcıların soket bağlantıları kuramayabileceğini göz önünde bulundurmalıdır.

Aşağıdaki kod, Adobe web sitesindeki bağlantı değişikliklerini saptamak için bir URLMonitor sınıfı örneğini kullanır. İzlenen bağlantı noktası, IRC'de yaygın bir bağlantı noktası olan 6667'dir:

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

Soket sunucusu güvenli bir bağlantı gerektiriyorsa, SocketMonitor yerine SecureSocketMonitor sınıfını kullanabilirsiniz.

DNS (Alan Adı Sistemi) kayıtları

DNSResolver sınıfını kullanarak DNS kaynak kayıtlarını arayabilirsiniz. DNS kaynak kayıtları alan adının IP adresi ve IP adresinin alan adı gibi bilgiler verir. Aşağıdaki türlerdeki DNS kaynak kayıtlarını arayabilirsiniz:

  • ARecord—Bir sunucunun IPv4 adresi

  • AAAARecord—Bir ana bilgisayarın IPv6 adresi

  • MXRecord (mail exchange record)—ana bilgisayarın mesaj alışverişi kaydı.

  • PTRRecord—bir IP adresinin internet sunucu adresi

  • SRVRecord—bir hizmetin hizmet kaydıdır.

Bir kayıt aramak için sorgulama dizesini kayıt türünü gösteren sınıf nesnesini DNSResolver nesnesinin lookup() yöntemine geçirin. Sorgulama dizesi kayıt türüne göre değişir:

Kayıt sınıfı

Sorgulama dizesi

Sorgulama dizesi örneği

ARecord

ana bilgisayar adı

“example.com”

AAAARecord

ana bilgisayar adı

“example.com”

MXRecord

ana bilgisayar adı

“example.com”

PTRRecord

IP adresi

“208.77.188.166”

SRVRecord

Service identifier: _service._protocol.host

“_sip._tcp.example.com”

Aşağıdaki kod örneği ana bilgisayarın “example.com” IP adresini arar.

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

Daha fazla bilgi için bkz.: