SoketlerFlash Player 9 ve üstü, Adobe AIR 1.0 ve üstü Soket, iki bilgisayar işlemi arasında kurulan bir ağ bağlantısı türüdür. Tipik olarak, işlemler aynı İnternet İletişim Kuralı (IP) ağına bağlı iki farklı bilgisayarda çalışır. Ancak, bağlı işlemler özel “yerel ana bilgisayar” IP adresi kullanarak aynı bilgisayarda çalışıyor olabilir. Adobe Flash Player istemci tarafı Taşıma Kontrolü İletişim Kuralı (TCP) soketlerini destekler. Bir Flash Player uygulaması, soket sunucusu olarak hareket eden başka bir işleme bağlanabilirken, diğer işlemlerden gelen bağlantı taleplerini kabul edemez. Diğer bir deyişle, bir Flash Player uygulaması TCP sunucusuna bağlanabilir, ancak bir tane gibi hareket edemez. Flash Player API’si XMLSocket sınıfını da içerir. XMLSocket sınıfı, o iletişim kuralını anlayan bir sunucuyla XML mesajları alışverişi yapmaya imkan veren Flash Player’a özel bir iletişim kuralı kullanır. XMLSocket sınıfı ActionScript 1’de ortaya koyulmuştur ve hala geriye dönük uyumluluk sağlaması için destekleniyor. Genel olarak Socket sınıfı, Flash XMLSockets ile iletişim kurmak için özellikle oluşturulmuş bir sunucuya bağlanmadığınız sürece yeni uygulamalar için kullanılmalıdır. Adobe AIR, soket tabanlı ağ programlaması için ilave sınıflar ekler. AIR uygulamaları ServerSocket sınıfıyla birlikte TCP soket sunucuları gibi hareket edebilir ve SecureSocket sınıfıyla birlikte SSL ya da TLS güvenliği gerektiren soket sunuculara bağlanabilir. AIR uygulamaları DatagramSocket sınıfıyla birlikte Evrensel Datagram İletişim Kuralı (UDP) mesajlarını da gönderip alabilir. TCP soketleriİletim Denetimi Protokolü (TCP), kalıcı bir ağ bağlantısı üzerinden mesaj alışverişi yapılmasını sağlar. TCP, gönderilen mesajların doğru sırada alınacağını garanti eder (büyük ağ sorunlarını engeller). TCP bağlantıları bir “istemci” ve bir “sunucu” gerektirir. Flash Player istemci soketleri oluşturabilir. Adobe AIR ayrıca sunucu soketleri oluşturabilir. Aşağıdaki ActionScript API'leri TCP bağlantıları sağlar:
İkili istemci soketleriİkili soket bağlantısı, istemci ve sunucunun özellikle XML paketleri değişmesini gerektirmemesi dışında, XML soketine benzer. Bunun yerine, bağlantı verileri ikili bilgi halinde 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ızı sağlar. Socket sınıfıSocket sınıfı soket bağlantıları yapabilmenizi ve ham ikili veriler okuyup yazabilmenizi sağlar. Socket sınıfı, ikili protokoller kullanan sunucularla birlikte çalışıldığında yararlıdır. İkili soket bağlantıları kullanarak, POP3, SMTP, IMAP ve NNTP gibi farklı İnternet protokolleriyle etkileşime izin veren bir kod yazabilirsiniz. Bu etkileşim, uygulamalarınızı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ı, bazıları little-endian bayt sırasını kullanır. “Ağ bayt sırası” big-endian olduğundan, İnternet'teki çoğu sunucu 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 ve alan sunucunun bayt sırasıyla eşleşen endian bayt sırasını kullanmalısınız. 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 biçiminde, başka bir deyişle, en önemli bayt önce olacak şekilde kodlanır. Bu varsayılan bayt sırası Java ve resmi ağ bayt sırası ile eşleşecek şekilde seçilir. 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. Soket sınıfı, (flash.utils paketinde yer alan) IDataInput ve DataOutput arabirimleri tarafından tanımlanan tüm yöntemleri üstlenir. Soketten yazmak ve okuma yapmak için bu yöntemler kullanılmalıdır. Daha fazla bilgi için bkz.: Güvenli istemci soketleri (AIR)SecureSocket sınıfını, Güvenli Soket Katmanı sürüm 4 (Secure Sockets Layer - SSLv4) veya Taşıma Katmanı Güvenliği sürüm 1 (Transport Layer Security - TLSv1) kullanan soket sürücülerine bağlanmak için kullanabilirsiniz. Güvenli bir soketin üç avantajı vardır: sunucu onaylama, veri bütünlüğü ve mesaj gizliliği. Çalışma zamanı, kullanıcının güvenilir deposunda bir sunucu sertifikasını ve kökle veya ara sertifika yetkisiyle olan ilişkisini kullanarak bir sunucuyu yetkilendirir. Çalışma zamanı, veri bütünlüğü ve mesaj gizliliği sağlamak için SSL ve TLS protokol uygulamaları tarafından kullanılan şifreleme algoritmalarını temel alır. SecureSocket nesnesini kullanarak sunucuya bağlandığınızda çalışma zamanı sertifika güven deposu kullanarak sunucu sertifikasını doğrular. Windows ve Mac üzerinde, işletim sistemi bir güven deposu sağlar. Linux'ta uygulamasının çalışma zamanı, kendi güven deposunu sağlar. Sunucu sertifikası geçerli veya güvenilir değilse çalışma zamanı ioError olayı gönderir. Doğrulamanın başarısız olmasının nedenini kontrol etmek için SecureSocket nesnesinin serverCertificateStatus özelliğini kontrol edin. Geçerli ve güvenilir sertifikası olmayan bir sunucuya bağlanmak için gereken bir koşul yoktur. CertificateStatus sınıfı, olası doğrulama sonuçlarını gösteren dize kalıp deyimlerini tanımlar:
SecureSocket nesnesi ile bağlanmak, güvenilir bir iletişim kuralı kullanan ve geçerli, güvenilir bir sertifikası bulunan bir sunucu gerektirir. Diğer açılardan SecureSocket nesnesi kullanma Soket nesnesi kullanmayla aynıdır. SecureSocket nesnesi tüm platformlarda desteklenmez. SecureSocket sınıfının isSupported özelliğini, çalışma zamanının SecureSocket nesnesinin geçerli istemci bilgisayarda kullanılmasını destekleyip desteklemediğini sınamak amacıyla kullanın. Daha fazla bilgi için bkz.: TCP socket örneği: Telnet istemcisi oluşturmaTelnet örneği, uzak bir sunucuya bağlanıp Socket sınıfını kullanarak veri iletilmesi tekniklerini göstermektedir. Örnekte şu teknikler gösterilmektedir:
Bu örneğin uygulama dosyalarını edinmek için bkz. www.adobe.com/go/learn_programmingAS3samples_flash_tr. Telnet uygulama dosyaları, Samples/Telnet klasöründe bulunabilir. Uygulama aşağıdaki dosyaları içerir:
Telnet soket uygulamasına genel bakışAna TelnetSocket.mxml dosyası, uygulamanın tamamı için kullanıcı arabirimi (UI) oluşturmaktan sorumludur. Bu dosya, belirtilen sunucuya bağlanmak için kullanıcı arabirimine ek olarak iki yöntemi tanımlar: login() ve sendCommand(). Aşağıdaki kod, ana uygulama dosyasında ActionScript'i listeler: import com.example.programmingas3.socket.Telnet; private var telnetClient:Telnet; private function connect():void { telnetClient = new Telnet(serverName.text, int(portNumber.text), output); console.title = "Connecting to " + serverName.text + ":" + portNumber.text; console.enabled = true; } private function sendCommand():void { var ba:ByteArray = new ByteArray(); ba.writeMultiByte(command.text + "\n", "UTF-8"); telnetClient.writeBytesToSocket(ba); command.text = ""; } Birinci kod satırı, özel com.example.programmingas.socket paketinden Telnet sınıfını içe aktarır. İkinci kod satırı, daha sonra connect() yöntemi tarafından başlatılacak olan telnetClient adında bir Telnet sınıfı örneğini bildirir. Ardından, connect() yöntemi bildirilir ve önceden bildirilmiş telnetClient değişkenini başlatır. Bu yöntem, kullanıcı tanımlı telnet sunucu adını, telnet sunucu bağlantı noktasını ve görüntüleme listesindeki TextArea bileşeninin bir başvurusunu iletir, bu başvuru, soket sunucusundan gelen metin yanıtlarını görüntülemek için kullanılır. connect() yönteminin son iki satırı, Panel için title özelliğini ayarlar ve Panel bileşenini etkinleştirir, böylece kullanıcının uzak sunucuya veri göndermesine olanak sağlanır. Kullanıcının komutlarını bir ByteArray nesnesi olarak uzak sunucuya göndermek için, ana uygulama dosyasındaki son yöntem olan sendCommand() kullanılır. Telnet sınıfına genel bakışTelnet sınıfı, uzak Telnet sunucusuna bağlanılmasından ve veri gönderilmesinden/alınmasından sorumludur. Telnet sınıfı şu özel değişkenleri bildirir: private var serverURL:String; private var portNumber:int; private var socket:Socket; private var ta:TextArea; private var state:int = 0; Birinci değişken olan serverURL, bağlanılacak kullanıcı tanımlı sunucu adresini içerir. İkinci değişken olan portNumber, Telnet sunucusunun geçerli olarak üzerinde çalıştığı bağlantı noktası numarasıdır. Varsayılan olarak Telnet hizmeti, bağlantı noktası 23'te çalışır. Üçüncü değişken olan socket, serverURL ve portNumber değişkenleri tarafından tanımlanmış sunucuya bağlanmayı deneyen bir Socket örneğidir. Dördüncü değişken olan ta, Sahne Alanı'ndaki bir TextArea bileşeni örneğine başvurudur. Bu bileşen, uzak Telnet sunucusundan gelen yanıtları veya olası hata mesajlarını görüntülemek için kullanılır. Son değişken olan state, Telnet istemcinizin hangi seçenekleri desteklediğini belirlemek için kullanılan sayısal bir değişkendir. Daha önce gördüğünüz gibi, Telnet sınıfının yapıcı işlevi, ana uygulama dosyasındaki connect() yöntemi tarafından çağrılır. Telnet yapıcısı üç parametre alır: server, port ve output. server ve port parametreleri, sunucu adını ve Telnet sunucusunun çalıştığı bağlantı noktası numarasını belirtir. Son parametre olan output, sunucu çıktısını kullanıcılara görüntüleneceğini Sahne alanındaki Textarea bileşen örneği için bir başvurudur. public function Telnet(server:String, port:int, output:TextArea) { serverURL = server; portNumber = port; ta = output; socket = new Socket(); socket.addEventListener(Event.CONNECT, connectHandler); socket.addEventListener(Event.CLOSE, closeHandler); socket.addEventListener(ErrorEvent.ERROR, errorHandler); socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); socket.addEventListener(ProgressEvent.SOCKET_DATA, dataHandler); Security.loadPolicyFile("http://" + serverURL + "/crossdomain.xml"); try { msg("Trying to connect to " + serverURL + ":" + portNumber + "\n"); socket.connect(serverURL, portNumber); } catch (error:Error) { msg(error.message + "\n"); socket.close(); } } Sokete veri yazmaVerileri bir soket bağlantısına yazmak için Soket sınıfındaki yazma yöntemlerinden herhangi birini çağırın. Bu yöntemler arasında writeBoolean(), writeByte(), writeBytes(), writeDouble() ve diğer yöntemler yer alır. Daha sonra verileri, flush() yöntemini kullanarak çıktı arabelleğinde boşaltın. Telnet sunucusunda, bayt dizisini parametre olarak alıp çıktı arabelleğine gönderen writeBytes() yöntemi kullanılarak soket bağlantısına veriler yazılır. writeBytesToSocket() yöntemi şöyledir: public function writeBytesToSocket(ba:ByteArray):void { socket.writeBytes(ba); socket.flush(); } Bu yöntem, ana uygulama dosyasının sendCommand() yöntemi tarafından çağrılır. Soket sunucusundan mesajları görüntülemeSoket sunucusundan her mesaj alındığında veya bir olay gerçekleştiğinde, özel msg() yöntemi çağrılır. Bu yöntem, Sahne Alanı'nda TextArea öğesine bir dize ekler ve TextArea bileşeninin alta gitmesini sağlayan özel bir setScroll() yöntemini çağırır. msg() yöntemi şöyledir: private function msg(value:String):void { ta.text += value; setScroll(); } TextArea bileşeninin içeriklerini otomatik olarak kaydırmadıysanız, kullanıcıların sunucudan gelen en son yanıtı görmek için metin alanında kaydırma çubuklarını elle sürüklemesi gerekir. TextArea bileşenini kaydırmasetScroll() yöntemi, kullanıcının döndürülen metnin son satırını görebilmesi için TextArea bileşeninin içeriklerini dikey olarak kaydıran tek bir ActionScript satırı içerir. Aşağıdaki kod parçası, setScroll() yöntemini gösterir: public function setScroll():void { ta.verticalScrollPosition = ta.maxVerticalScrollPosition; } Bu yöntem, geçerli olarak görüntülenen karakterlerin en üst satırının satır numarası olan verticalScrollPosition özelliğini ayarlar ve bunu maxVerticalScrollPosition özelliğinin değerine ayarlar. XML soketleriBir XML soketi, belirgin bir şekilde kapatılana kadar açık kalan uzak sunucuya bağlantı kurmanıza izin verir. Sunucu ve istemci arasında, XML gibi dize verisi alış verişi yapabilirsiniz. XML soket sunucusu kullanmanın sağladığı faydalardan biri, istemcinin açık bir şekilde veri istemek zorunda kalmamasıdır. Sunucu istek beklemeden veri gönderebilir ve bağlı durumda olan her istemciye veri gönderebilir. Flash Player'da ve uygulama sanal alanı dışındaki Adobe AIR içeriğinde, XML soketi bağlantıları hedef sunucuda bir soket ilke dosyası olmasını gerektirir. Daha fazla bilgi için, bkz. Web sitesi denetimleri (ilke dosyaları) ve Soketlere bağlanma. XMLSocket sınıfı güvenlik duvarları arasından otomatik olarak tünel oluşturamaz, çünkü Real-Time Messaging Protocol'ün (RTMP) aksine XMLSocket, HTTP tüneli özelliğine sahip değildir. HTTP tüneli kullanmanız gerekiyorsa, bunun yerine Flash Remoting veya Flash Media Server (RTMP'yi destekler) kullanabilirsiniz. Şu kısıtlamalar Flash Player veya uygulama güvenlik sanal alanı dışındaki AIR uygulamasındaki içeriğin bir XMLSocket nesnesini sunucuya bağlanmak için nasıl ve nerede kullanabileceğini belirtir:
Not: XMLSocket nesnesiyle iletişim kurmak üzere bir sunucu kurmak 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 aktarmak ve bu sunucudan XML almak için XMLSocket sınıfının XMLSocket.connect() ve XMLSocket.send() yöntemlerini kullanabilirsiniz. XMLSocket.connect() yöntemi, web sunucusu bağlantı noktasıyla bir soket bağlantısı oluşturur. XMLSocket.send() yöntemi, XML nesnesini soket bağlantısında belirtilen sunucuya iletir. XMLSocket.connect() yöntemini çağırdığınızda, uygulama sunucuya bir TCP/IP bağlantısı açar ve aşağıdaki durumlardan biri oluşana kadar bağlantıyı açık tutar:
XMLSocket sınıfıyla bir sunucuya bağlanmaBir soket bağlantısı oluşturmak için, soket bağlantı isteğini bekleyecek ve Flash Player veya AIR uygulamasına yanıt gönderecek bir sunucu tarafı uygulaması oluşturmalısınız. Bu tür bir sunucu tarafı uygulaması AIR'de veya Java, Python veya Perl gibi başka bir programlama dilinde yazılabilir. XMLSocket sınıfını kullanmak için sunucu bilgisayarı, XMLSocket sınıfı tarafından kullanılan basit protokolü anlayan bir arka plan programı çalıştırmalıdır:
Java XML soket sunucusu oluşturma ve bağlanmaAşağıdaki kod, gelen bağlantıları kabul eden ve komut istemi penceresinde alınan mesajları görüntüleyen, Java'da yazılmış basit bir XMLSocket sunucusunu gösterir. Sunucunuzu komut satırından başlatırken farklı bir bağlantı noktası numarası belirtebiliyor olsanız da, yeni bir sunucu varsayılan olarak yerel bilgisayarınızın 8080 bağlantı noktasında 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 sabit diskinize SimpleServer.java olarak kaydedin ve SimpleServer.class adlı bir Java sınıfı dosyası oluşturan Java derleyicisini kullanarak derleyin. Bir komut istemini açarak ve java SimpleServer yazarak XMLSocket sunucusunu başlatabilirsiniz. SimpleServer.class dosyası yerel bilgisayarınızda veya ağda herhangi bir yerde konumlandırılabilir; web sunucunuzun kök dizinine yerleştirilmesi gerekmez. Dosyalar Java sınıf yolu içinde bulunmadığından sunucuyu başlatamıyorsanız, sunucuyu şununla başlatmayı deneyin: java -classpath . SimpleServer. 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, verilerin başarıyla aktarılıp aktarılmadığını gösteren bir değer döndürmez. Veri gönderilmeye çalışılırken bir hata oluştuysa, bir IOError hatası verilir. XML soket sunucusuna gönderdiğiniz her mesajın yeni satır (\n) karakteriyle sonlandırılması gerekir. Daha fazla bilgi için bkz. XMLSocket Sunucu soketleriDiğer işlemlerin İletim Denetimi Protokolü (TCP) soketi kullanarak uygulamanıza bağlanmalarını sağlamak için ServerSocket sınıfını kullanın. Bağlanma işlemi yerel bir bilgisayarda veya ağa bağlanmış başka bir bilgisayarda çalıştırılabilir. Bir ServerSocket nesnesi bir bağlantı talebi aldığında bir connect olayı gönderir. ServerSocketConnectEvent olayı, Soket nesnesi içeren bir olayla gönderildi. Bu Soket nesnesini sonradan diğer işlemlerle iletişim kurmak için kullanabilirsiniz. Gelen soket bağlantılarını dinlemek için:
ServerSocket nesnesi, siz close() yöntemini çağırıncaya kadar ek bağlantıları dinlemeye devam eder. Aşağıdaki kod örneğinde soket sunucu uygulamasının nasıl oluşturulduğu gösterilmektedir. Örnek, bağlantı noktası 8087'de gelen bağlantıları dinler. Bir bağlantı alındığında örnek tarafından bir mesaj gönderilir ("Bağlandı" dizesi). istemci soketine Bu nedenle sunucu, istemciden geri gelen tüm iletileri ikinci kez gösterir. package { import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.events.ServerSocketConnectEvent; import flash.net.ServerSocket; import flash.net.Socket; public class ServerSocketExample extends Sprite { private var serverSocket:ServerSocket; private var clientSockets:Array = new Array(); public function ServerSocketExample() { try { // Create the server socket serverSocket = new ServerSocket(); // Add the event listener serverSocket.addEventListener( Event.CONNECT, connectHandler ); serverSocket.addEventListener( Event.CLOSE, onClose ); // Bind to local port 8087 serverSocket.bind( 8087, "127.0.0.1" ); // Listen for connections serverSocket.listen(); trace( "Listening on " + serverSocket.localPort ); } catch(e:SecurityError) { trace(e); } } public function connectHandler(event:ServerSocketConnectEvent):void { //The socket is provided by the event object var socket:Socket = event.socket as Socket; clientSockets.push( socket ); socket.addEventListener( ProgressEvent.SOCKET_DATA, socketDataHandler); socket.addEventListener( Event.CLOSE, onClientClose ); socket.addEventListener( IOErrorEvent.IO_ERROR, onIOError ); //Send a connect message socket.writeUTFBytes("Connected."); socket.flush(); trace( "Sending connect message" ); } public function socketDataHandler(event:ProgressEvent):void { var socket:Socket = event.target as Socket //Read the message from the socket var message:String = socket.readUTFBytes( socket.bytesAvailable ); trace( "Received: " + message); // Echo the received message back to the sender message = "Echo -- " + message; socket.writeUTFBytes( message ); socket.flush(); trace( "Sending: " + message ); } private function onClientClose( event:Event ):void { trace( "Connection to client closed." ); //Should also remove from clientSockets array... } private function onIOError( errorEvent:IOErrorEvent ):void { trace( "IOError: " + errorEvent.text ); } private function onClose( event:Event ):void { trace( "Server socket closed by OS." ); } }} Daha fazla bilgi için bkz.: UDP soketleri (AIR)Evrensel Veri Protokolü (UDP), ağ bağlantısı üzerinden mesaj alışverişi yapılmasını sağlar. UDP, mesajların sırayla veya hepsinin dağıtıldığını garanti etmez. UDP ile, işletim sisteminin ağ kodu mesajları sıralamada (marshaling), izlemede ve onaylamada genellikle daha az zaman harcar. Bu nedenle UDP mesajları genellikle hedef uygulamaya TCP mesajlarınınkinden daha kısa bir gecikmeyle ulaşır. UDP soket iletişimi, bir oyunda konum güncellemeleri veya sesli sohbet uygulamasındaki ses paketleri gibi gerçek zamanlı bilgi göndermek zorunda olduğunuz zamanlarda yararlıdır. Bu tür uygulamalarda bazı veri kayıpları kabul edilebilirdir. İletim gecikme süresinin düşük olması, iletilerin varmalarının garantili olmasından daha önemlidir. Tüm diğer amaçlar açısından TCP soketleri daha iyi bir tercihtir. AIR uygulamanız DatagramSocket ve DatagramSocketDataEvent sınıflarıyla UDP mesajları gönderir ve alır. Bir UDP mesajı göndermek veya almak için:
Aşağıdaki kod örneği, bir uygulamanın nasıl UDP mesajları gönderdiğini ve aldığını göstermektedir. Örnek, hedef bilgisayara "Merhaba" dizesinin yer aldığı tek mesaj gönderir. Alınan herhangi bir mesajın içeriğini de izler. package { import flash.display.Sprite; import flash.events.DatagramSocketDataEvent; import flash.events.Event; import flash.net.DatagramSocket; import flash.utils.ByteArray; public class DatagramSocketExample extends Sprite { private var datagramSocket:DatagramSocket; //The IP and port for this computer private var localIP:String = "192.168.0.1"; private var localPort:int = 55555; //The IP and port for the target computer private var targetIP:String = "192.168.0.2"; private var targetPort:int = 55555; public function DatagramSocketExample() { //Create the socket datagramSocket = new DatagramSocket(); datagramSocket.addEventListener( DatagramSocketDataEvent.DATA, dataReceived ); //Bind the socket to the local network interface and port datagramSocket.bind( localPort, localIP ); //Listen for incoming datagrams datagramSocket.receive(); //Create a message in a ByteArray var data:ByteArray = new ByteArray(); data.writeUTFBytes("Hello."); //Send the datagram message datagramSocket.send( data, 0, 0, targetIP, targetPort); } private function dataReceived( event:DatagramSocketDataEvent ):void { //Read the data from the datagram trace("Received from " + event.srcAddress + ":" + event.srcPort + "> " + event.data.readUTFBytes( event.data.bytesAvailable ) ); } }} UDP (user data protocol: kullanıcı veri protokolü) soketlerini kullanırken aşağıdaki noktaları göz önünde bulundurmayı unutmayın.
Daha fazla bilgi için bkz.: IPv6 adresleriFlash Player 9.0.115.0 ve sonrası, IPv6'yı (Internet Protokolü sürüm 6) destekler. IPv6, 128 bit adresleri destekleyen bir Internet Protokolü sürümüdür (32 bit adresleri destekleyen önceki IPv4 protokolündeki bir geliştirme). Ağ arabirimleriniz üzerinde IPv6'yı etkinleştirmeniz gerekebilir. Daha fazla bilgi için verileri barındıran işletim sisteminin Yardım bölümüne bakın. IPv6, barındıran sistem üzerinde destekleniyorsa, köşeli ayraç ([]) içindeki URL'lerde şu şekilde sayısal IPv6 değişmez adreslerini belirtebilirsiniz: [2001:db8:ccc3:ffff:0:444d:555e:666f] Flash Player, şu kurallara göre değişmez IPv6 değerlerini döndürür:
Flash Player'ın döndürdüğü IPv6 değerleri şu istisnaları içerir:
|
|