Flash CS4 Kaynakları

Soket bağlantıları



ActionScript 3.0'da mümkün olan iki farklı soket bağlantısı türü vardır: XML soket bağlantıları ve ikili soket bağlantıları. XML soketi, uzak bir sunucuya bağlanmanıza ve açıkça kapatılıncaya kadar açık kalan bir sunucu bağlantısı oluşturmanıza olanak sağlar. Bu da sürekli olarak yeni sunucu bağlantıları açmanız gerekmeden bir sunucu ile istemci arasında XML verilerinin alışverişini yapmanıza olanak sağlar. XML soketi sunucusunun kullanılmasının başka bir avantajı da kullanıcının açıkça veri istemesine gerek kalmamasıdır. İstekler olmadan sunucudan veri gönderebilir ve XML soket sunucusuna bağlı her istemciye veriler gönderebilirsiniz.

XML soket bağlantıları için, hedef sunucuda bir soket ilke dosyasının bulunması gerekir. Daha fazla bilgi için, bkz. Web sitesi denetimleri (ilke dosyaları) ve Soketlere bağlanma.

İkili soket bağlantısı XML soketine benzer, tek farkı, istemcinin ve sunucunun özel olarak XML paketlerinin alışverişini yapmasına gerek kalmamasıdır. Bunun yerine bağlantı, ikili bilgiler olarak verileri aktarabilir. Bu da, arasında posta sunucuları (POP3, SMTP ve IMAP) ve haber sunucularının da (NNTP) yer aldığı çok çeşitli hizmetlere bağlanmanıza olanak sağlar.

Socket sınıfı

ActionScript 3.0'da ilk defa tanıtılan Socket sınıfı, ActionScript uygulamasının soket bağlantıları yapmasına ve ham ikili verileri okuyup yazmasına olanak sağlar. Bu XMLSocket sınıfına benzer ancak alınan ve iletilen verinin formatını dikte etmez. Socket sınıfı, ikili protokoller kullanan sunucularla birlikte çalışırken kullanışlıdır. İkili soket bağlantılarını kullanarak, POP3, SMTP, IMAP ve NNTP gibi birçok farklı Internet protokolüyle etkileşim kurulmasına olanak sağlayan kodlar yazabilirsiniz. Bu da Flash Player uygulamasının posta ve haber sunucularına bağlanmasını sağlar.

Flash Player, doğrudan bir sunucunun ikili protokolünü kullanarak o sunucuyla arabirim oluşturabilir. Bazı sunucular big-endian bayt sırasını kullanırken bazıları da little-endian bayt sırasını kullanır. "Ağ bayt sırası" big-endian olduğundan, Internet'teki sunucuların çoğu big-endian bayt sırasını kullanır. Intel® x86 mimarisi tarafından kullanıldığından, little-endian bayt sırası sık kullanılır. Veri gönderen veya alan sunucunun bayt sırasıyla eşleşen endien bayt sırasını kullanmanız gerekir. IDataInput ve IDataOutput arabirimleri tarafından gerçekleştirilen tüm işlemler ve bu arabirimleri uygulayan sınıflar (ByteArray, Socket ve URLStream) varsayılan olarak big-endian formatında, başka bir deyişle, en önemli bayt önce olacak şekilde kodlanır. Bu, Java ve resmi ağ bayt sırasıyla eşleşme sağlamak için yapılmıştır. Kullanılan big-endian veya little-endian bayt sırasını değiştirmek için, endian özelliğini Endian.BIG_ENDIAN veya Endian.LITTLE_ENDIAN olarak ayarlayabilirsiniz.

Socket sınıfı, IDataInput ve IDataOutput arabirimleri (flash.utils paketinde bulunur) tarafından uygulanan tüm yöntemleri miras alır ve Socket öğesine yazmak ve Socket öğesinden okumak için bu yöntemlerin kullanılması gerekir.

XMLSocket sınıfı

ActionScript, bir sunucuyla sürekli bir bağlantı açmanıza olanak veren yerleşik bir XMLSocket sınıfı sağlar. Bu açık bağlantı, gecikme sorunlarını ortadan kaldırır ve sohbet uygulamaları veya çok oyunculu oyunlar gibi gerçek zamanlı uygulamalar için yaygın olarak kullanılır. Klasik bir HTTP tabanlı sohbet çözümü sıklıkla sunucuyu tarar ve bir HTTP isteği kullanarak yeni mesajları indirir. Buna karşılık, XMLSocket sohbet çözümü sunucuyla olan bağlantının açık kalmasını sağlar. Böylece sunucu, istemciden istek olmadan gelen mesajları hemen gönderebilir.

Soket bağlantısı oluşturmak için, soket bağlantısı isteğini bekleyecek ve SWF dosyasına bir yanıt gönderecek bir sunucu tarafı uygulaması oluşturmanız gerekir. Bu tür bir sunucu tarafı uygulaması, Java, Python veya Perl gibi bir programlama dilinde yazılabilir. XMLSocket sınıfını kullanmak için sunucu bilgisayarı, XMLSocket sınıfı tarafından kullanılan protokolü anlayan bir hayalet program çalıştırmalıdır. Protokol aşağıdaki listede açıklanmaktadır:

  • XML mesajları tam iki yönlü TCP/IP akış soket bağlantısı üzerinden gönderilir.

  • Her XML mesajı, sıfır (0) baytıyla sonlandırılan tam bir XML belgesidir.

  • Tek bir XMLSocket bağlantısı üzerinden sınırsız sayıda XML mesajı gönderilip alınabilir.

XMLSocket sınıfı, Real-Time Messaging Protocol'den (RTMP) farklı olarak HTTP tüneli özelliğine sahip olmadığından, güvenlik duvarları üzerinden otomatik olarak tünel açamaz. HTTP tüneli kullanmanız gerekiyorsa, bunun yerine Flash Remoting veya Flash Media Server (RTMP'yi destekler) kullanabilirsiniz.

Not: Bir sunucunun XMLSocket nesnesi ile iletişim kuracak şekilde ayarlanması zor olabilir. Uygulamanız gerçek zamanlı etkileşim gerektirmiyorsa, XMLSocket sınıfı yerine URLLoader sınıfını kullanın.

Soket bağlantısı üzerinden bir sunucuya XML iletmek veya sunucudan XML almak için XMLSocket sınıfının XMLSocket.connect() ve XMLSocket.send() yöntemlerini kullanabilirsiniz. XMLSocket.connect() yöntemi, bir web sunucusu bağlantı noktasıyla soket bağlantısı oluşturur. XMLSocket.send() yöntemi, soket bağlantısında belirtilen sunucuya bir XML nesnesi iletir.

XMLSocket.connect() yöntemini çağırdığınızda, Flash Player uygulaması sunucuya bir TCP/IP bağlantısı açar ve aşağıdakiler oluşuncaya kadar bu bağlantıyı açık tutar:

  • XMLSocket sınıfının XMLSocket.close() yöntemi çağrılır.

  • XMLSocket nesnesine başvuru yoktur.

  • Flash Player uygulamasından çıkılır.

  • Bağlantı kesilir. (Örneğin, modemin bağlantısı kesilir.)

Java XML soket sunucusu oluşturma ve Java XML soket sunucusuna bağlanma

Aşağıdaki kod, Java uygulamasında yazılmış, gelen bağlantıları kabul eden ve alınan mesajları komut istemi penceresinde görüntüleyen basit bir XMLSocket sunucusunu gösterir. Sunucunuzu başlatırken komut satırından farklı bir bağlantı noktası numarası belirtebilseniz de, varsayılan olarak, yerel makinenizin 8080 numaralı bağlantı noktasında yeni bir sunucu oluşturulur.

Yeni bir metin belgesi oluşturun ve şu kodu ekleyin:

import java.io.*; 
import java.net.*; 
 
class SimpleServer 
{ 
    private static SimpleServer server; 
    ServerSocket socket; 
    Socket incoming; 
    BufferedReader readerIn; 
    PrintStream printOut; 
 
    public static void main(String[] args) 
    { 
        int port = 8080; 
 
        try 
        { 
            port = Integer.parseInt(args[0]); 
        } 
        catch (ArrayIndexOutOfBoundsException e) 
        { 
            // Catch exception and keep going. 
        } 
 
        server = new SimpleServer(port); 
    } 
 
    private SimpleServer(int port) 
    { 
        System.out.println(">> Starting SimpleServer"); 
        try 
        { 
            socket = new ServerSocket(port); 
            incoming = socket.accept(); 
            readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream())); 
            printOut = new PrintStream(incoming.getOutputStream()); 
            printOut.println("Enter EXIT to exit.\r"); 
            out("Enter EXIT to exit.\r"); 
            boolean done = false; 
            while (!done) 
            { 
                String str = readerIn.readLine(); 
                if (str == null) 
                { 
                    done = true; 
                } 
                else 
                { 
                    out("Echo: " + str + "\r"); 
                    if(str.trim().equals("EXIT")) 
                    { 
                        done = true; 
                    } 
                } 
                incoming.close(); 
            } 
        } 
        catch (Exception e) 
        { 
            System.out.println(e); 
        } 
    } 
 
    private void out(String str) 
    { 
        printOut.println(str); 
        System.out.println(str); 
    } 
}

Belgeyi SimpleServer.java olarak sabit diskinize kaydedin ve Java derleyicisi kullanarak derleyin, böylece SimpleServer.class adında bir Java sınıf dosyası oluşturulur.

Bir komut istemi açıp java SimpleServer yazarak XMLSocket sunucusunu başlatabilirsiniz. SimpleServer.class dosyası, yerel bilgisayarınızda veya ağınızda herhangi bir yerde bulunabilir; web sunucunuzun kök dizininde bulunmak zorunda değildir.

Dosyalar Java sınıf yolu içinde bulunmadığından sunucuyu başlatamıyorsanız, sunucuyu şununla başlatmayı deneyin: java -classpath . SimpleServer.

ActionScript uygulamanızdan XMLSocket öğesine bağlanmak için, aşağıdaki gibi, yeni bir XMLSocket sınıfı örneği oluşturmanız ve bir ana bilgisayar adı ve bağlantı noktası numarası iletirken XMLSocket.connect() yöntemini çağırmanız gerekir:

var xmlsock:XMLSocket = new XMLSocket(); 
xmlsock.connect("127.0.0.1", 8080);

Sunucudan her veri aldığınızda, data olayı (flash.events.DataEvent.DATA) gönderilir:

xmlsock.addEventListener(DataEvent.DATA, onData); 
private function onData(event:DataEvent):void 
{ 
    trace("[" + event.type + "] " + event.data); 
}

XMLSocket sunucusuna veri göndermek için, XMLSocket.send() yöntemini kullanıp bir XML nesnesi veya dizesi iletirsiniz. Flash Player, sağlanan parametreyi bir String nesnesine dönüştürür ve içeriği bir sıfır (0) baytın takip ettiği XMLSocket sunucusuna gönderir:

xmlsock.send(xmlFormattedData);

XMLSocket.send() yöntemi, verinin başarıyla iletilmiş olup olmadığını belirten bir değer döndürmez. Veri gönderilmeye çalışılırken bir hata oluştuysa, bir IOError hatası atılır.

XML soket sunucusuna gönderdiğiniz her mesajın yeni satır (\n) karakteriyle sonlandırılması gerekir.