Connexions socket

ActionScript 3.0 permet d'utiliser deux types de connexions socket : les connexions socket XML et binaires. Un socket XML vous permet de vous connecter à un serveur distant et de créer une connexion serveur qui reste ouverte jusqu'à sa fermeture explicite. Vous pouvez ainsi échanger des données XML entre un serveur et un client sans avoir à ouvrir à chaque fois une nouvelle connexion serveur. Autre avantage de l'utilisation d'un serveur socket XML : l'utilisateur n'a pas besoin de demander explicitement les données. Vous pouvez envoyer des données du serveur sans requête préalable, et ce à chaque client connecté au serveur socket XML.

Une connexion socket binaire est semblable à un socket XML à la différence que le client et le serveur n'ont pas besoin d'échanger obligatoirement des paquets XML. La connexion peut en effet transférer des données au format binaire. Vous pouvez ainsi vous connecter à une large gamme de services, notamment des serveurs de messagerie (POP3, SMTP et IMAP) et d'informations (NNTP).

Sous-rubriques

Classe Socket
Classe XMLSocket
Création et connexion à un serveur socket XML Java

Classe Socket

Nouveauté d'ActionScript 3.0, la classe Socket permet au code d'établir des connexions socket et de lire et d'écrire des données binaires brutes. Elle est semblable à la classe XMLSocket mais n'impose pas de contrainte quant au format des données reçues ou transmises. La classe Socket est utile si vous utilisez des serveurs faisant appel à des protocoles binaires. Grâce aux connexions socket binaires, vous pouvez écrire du code permettant l'interaction entre différents protocoles Internet, par exemple POP3, SMTP, IMAP et NNTP. En échange, cela permet à Flash Player de se connecter à des serveurs de messagerie et d'informations.

Flash Player peut communiquer directement avec un serveur en utilisant directement le protocole binaire de ce serveur. Certains serveurs utilisent l'ordre d'octets « gros-boutiste », d'autres l'ordre « petit-boutiste ». La plupart des serveurs sur Internet utilise l'ordre gros-boutiste car il s'agit de l'ordre d'octets du réseau. L'ordre petit-boutiste s'est répandu en raison de son utilisation par l'architecture Intel® x86. Vous devez utiliser l'ordre d'octets correspondant au serveur qui envoie et reçoit les données. Toutes les opérations sont effectuées par les interfaces IDataInput et IDataOutput, et les classes qui les mettent en œuvre (ByteArray, Socket et URLStream) sont par défaut encodées au format gros-boutiste (l'octet le plus significatif en premier). On vise ainsi à respecter Java et l'ordre d'octets officiel des réseaux. Pour modifier l'ordre d'octets à utiliser, vous pouvez définir la propriété endian sur Endian.BIG_ENDIAN ou Endian.LITTLE_ENDIAN.

CONSEIL

 

La classe Socket hérite de toutes les méthodes mises en œuvre par les interfaces IDataInput et IDataOutput (dans le package flash.utils). Ces méthodes sont à utiliser pour l'écriture et la lecture de la classe Socket.

Classe XMLSocket

ActionScript fournit une classe XMLSocket intégrée qui vous permet d'établir une connexion continue avec un serveur. Cette connexion ouverte supprime les périodes d'attente et sert souvent dans des applications en temps réel telles que les dialogues en ligne ou les jeux multijoueurs. Une solution de dialogue en ligne par HTTP classique interroge régulièrement le serveur et télécharge de nouveaux messages à l'aide d'une requête HTTP. A l'inverse, une solution de dialogue en ligne XMLSocket maintient une connexion ouverte au serveur, permettant à celui-ci d'envoyer immédiatement des messages entrants sans requête du client.

Pour créer une connexion socket, vous devez créer une application côté serveur qui attendra la requête de connexion socket et enverra une réponse au fichier SWF. Ce type d'application côté serveur peut être écrit dans un langage tel que Java, Python ou Perl. Pour utiliser la classe XMLSocket, l'ordinateur serveur doit exécuter un démon qui comprend le protocole utilisé par la classe XMLSocket. Le protocole est décrit dans la liste suivante :

REMARQUE

 

La classe XMLSocket ne peut pas automatiquement tunneler à travers les pare-feux parce que, contrairement au protocole RTMP (Real-Time Messaging Protocol), le XMLSocket n'a pas de capacité de tunneling HTTP. Si vous devez utiliser le tunneling HTTP, envisagez l'utilisation de Flash Remoting ou Flash Media Server (qui prend en charge RTMP).

Les restrictions suivantes s'appliquent au mode et à l'emplacement de connexion d'un objet XMLSocket :

REMARQUE

 

La configuration d'un serveur en vue de la communication avec un objet XMLSocket peut être difficile à réaliser. Si votre application ne requiert pas d'interactivité en temps réel, utilisez la classe URLLoader, plutôt que la classe XMLSocket.

Vous pouvez utiliser les méthodes XMLSocket.connect() et XMLSocket.send() de la classe XMLSocket pour transférer un objet XML vers et à partir d'un serveur sur une connexion socket. La méthode XMLSocket.connect() établit une connexion socket avec le port d'un serveur Web. La méthode XMLSocket.send() transmet un objet XML au serveur spécifié dans la connexion socket.

Lorsque vous invoquez la méthode XMLSocket.connect(), Flash Player ouvre une connexion TCP/IP avec le serveur et garde cette connexion ouverte jusqu'à ce que l'un des événements suivants se produise :

Création et connexion à un serveur socket XML Java

Le code suivant illustre un simple serveur XMLSocket écrit en langage Java qui accepte les connexion entrantes et affichent les messages reçus dans la fenêtre d'invite de commande. Par défaut, un nouveau serveur est créé sur le port 8080 de votre machine locale, mais vous pouvez spécifier un numéro de port différent en lançant le serveur à partir de la ligne de commande.

Créez un document texte et ajoutez-y le code suivant :

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)
        {
            // Intercepter l'exception et poursuivre.
        }

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

Enregistrez le document sur le disque dur sous le nom SimpleServer.java et compilez-le à l'aide d'un compilateur Java, qui crée un fichier de classe Java nommé SimpleServer.class.

Vous pouvez lancer le serveur XMLSocket via la ligne de commande en tapant java SimpleServer. Le fichier SimpleServer.class peut se situer à tout emplacement sur l'ordinateur local ou le réseau ; il n'est pas nécessaire de le placer dans le répertoire racine du serveur Web.

CONSEIL

 

Si vous ne pouvez pas lancer le serveur parce que des fichiers ne se trouvent pas dans le chemin de classe Java, essayez de le faire avec java -classpath . SimpleServer.

Pour établir une connexion au serveur XMLSocket à partir de votre application ActionScript, vous devez créer une nouvelle instance de la classe XMLSocket et appelez la méthode XMLSocket.connect() tout en transférant le nom d'hôte et le numéro de port, comme suit :

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

Un événement securityError (flash.events.SecurityErrorEvent) se produit si un appel à XMLSocket.connect() essaie d'établir une connexion soit à un serveur en dehors du sandbox de sécurité de l'appelant, soit sur un numéro de port inférieur à 1024.

Dès que vous recevez des données du serveur, l'événement data (flash.events.DataEvent.DATA) est distribué :

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

Pour envoyer des données au serveur XMLSocket, utilisez la méthode XMLSocket.send() et transmettez un objet XML ou une chaîne. Flash Player convertit le paramètre fourni en objet String et envoie au serveur XMLSocket son contenu suivi d'un octet nul (0) :

xmlsock.send(xmlFormattedData);

La méthode XMLSocket.send() ne renvoie pas de valeur indiquant si les données ont bien été transmises. Si une erreur se produit pendant la tentative d'envoi des données, une erreur IOError est renvoyée.

CONSEIL

 

Chaque message que vous envoyez au serveur socket doit se terminer par un caractère de changement de ligne (\n).


Flash CS3

 

M'envoyer un message électronique lorsque des commentaires sont ajoutés à cette page | Rapport de commentaire

Page en cours: http://livedocs.adobe.com/flash/9.0_fr/main/00000318.html