Partage
  • Partager sur Facebook
  • Partager sur Twitter

policy-file-request plz aidez moi

    21 août 2009 à 17:46:23

    Bonjour tous le monde , ça fait 2 mois que je cherche a établir une communication entre un client flash et un serveur JAVA

    tout ce passe bien quand je lance le client depuis l'editeur d'adobe

    mais dès que je lance mon client SWF independant ou bien dans une page web les problemes de <policy-file-request/> commence

    j'ai lu tous les sujets precedemment posté dans ce forum qui parlent de <policy-file-request/> mais rien ne nouveau tjrs pas de communications entre client et serveur

    pour le moment je teste en local :

    serveur JAVA qui ecoute sur le port 2222 :
    public static Message decode(BufferedReader input,PrintWriter output) throws ParserConfigurationException, IOException {
            Message msg = new Message();
            Document document = null;
            String chaine="aaaa";
            try {
                       chaine =input.readLine();
               if(chaine.equalsIgnoreCase("<policy-file-request/>"))
               {output.println("<?xml version=\"1.0\"?><!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\"><cross-domain-policy><allow-access-from domain=\"*\" /><allow-access-from domain=\"http://127.0.0.1\" to-ports=\"*\" /></cross-domain-policy>"+"\n");
               }
               else{
                document = DocumentHelper.parseText(g); 
     
               }
    ...etc
    

    un serveur wamp pour heberger le fichier crossdomain.xml :


    <?xml version="1.0"?>  
    <!DOCTYPE cross-domain-policy    
      SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">  
    <cross-domain-policy>  
      <allow-access-from domain="*" />  
      <allow-access-from domain="http://127.0.0.1" to-ports="*" />  
    </cross-domain-policy>
    


    et voila le bout de code du client flash qui va récupérer l'autorisation :


    ..........
    function connect(evm:MouseEvent) {
    	trace_txt.text+="ooo";
    	Security.loadPolicyFile("http://127.0.0.1/crossdomain.xml");
    	connexion=new XMLSocket(ip_txt.text,parseInt(port_txt.text));
    ..........etc
    


    y a t'il quequ'un parmis vous qui peut m'aider a mettre fin a mes soufrances avec ce programme

    et merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter

    Qui ne risque rien n'a rien.

      21 août 2009 à 19:48:09

      Personnellement dans mon script en PHP qui fonctionne parfaitement et qui tourne en se moment même, je renvoi ça:
      if($Reception{0}=="<") // <policy-file-request/> ... de FLASH
      {
      	$Paquet='<cross-domain-policy><allow-access-from domain="*" to-ports="'.$Port.'"/></cross-domain-policy>'.chr(0x00);
      	@socket_write($ClientSocket,$Paquet);
      }
      

      Donc en faite, je ne renvoi pas <?xml...> et je n'ai pas mi de fichier crossdomain.xml à la racine.
      Par contre, je pense que ton problème vient du fait que 127.0.0.1 est trop spécifique (uniquement en local) alors que tu devrais le mettre en joker (*) pour autoriser tous le monde à se connecter. De plus, il me semble que tu es obligé (en tout cas sa marche comme ça chez moi xD ) d'indiquer ton port (par exemple moi c'est le port 9001) et là si tu met un joker je sais pas si ça fonctionne.

      Quand ça marche, il faut laisser telquel xD


      Par conséquent ton script ressemblerai à ça:
      public static Message decode(BufferedReader input,PrintWriter output) throws ParserConfigurationException, IOException {
              Message msg = new Message();
              Document document = null;
              String chaine="aaaa";
              try {
                         chaine =input.readLine();
                 if(chaine.equalsIgnoreCase("<policy-file-request/>"))
                 {
                          output.println("<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"2222\" /></cross-domain-policy>"+"\n");
                 }
                 else
                 {
                          document = DocumentHelper.parseText(g); 
                 }
      ...etc
      


      Et si cela ne fonctionne toujours pas, il faut que tu envoi le caractère null 0x00 à la fin pour bien dire que l'envoi de tes données soient terminées, car en faite flash l'attend avant de faire ce qu'il a à faire. Pense aussi à l'encodage, s'il y a toujours un problème.

      Aussi pendant que j'y pense, si tu as toujours un problème, vérifie bien que ta condition si ce que tu reçois est "<policy-file-request/>" soit aperçu par Java (log si le test est bien passé ou non. Car il peut y avoir le caractère 0x00 à la fin de la chaine que tu reçois. C'est pour cela que moi, je ne teste que le premier caractère, sachant que les autres ne commencerons jamais par "<".

      Voili, good luck
      • Partager sur Facebook
      • Partager sur Twitter
        21 août 2009 à 23:14:13

        merci infiniment pour cette réponse ^^

        après plusieurs essaie j'ai trouvé que cette command :
        Security.loadPolicyFile("xmlsocket://127.0.0.1:1987");
        


        n'envoie pas un caractére de fin ligne, alors que la méthode de lecture en java (readLine()):
        String chaine_recu =input.readLine();
        


        reste bloqué en attendant le symbol spécial : soit "\n" soit "\r"

        alors maintenant la question c'est comment dire a loadPolicyFile() d'envoyer un retour a la ligne ???

        et merci encore Yanonix pour votre réponse :)
        --------------------------------------------------------------------------------------------------
        2 eme réponse (bizzard dans ce forum on peut pas ecrire 2 réponse succecive durant 24h :s)

        super chouette après 2 mois de souffrance j'arrive enfin a surpasser les broblemes de la securité :lol:
        merci infiniment Yanonix

        pour détourné le probleme de caractére null j'ai utiliser la methode read a la place de readline()
        et je construit moi meme la chaine caractére par caractere
        • Partager sur Facebook
        • Partager sur Twitter

        Qui ne risque rien n'a rien.

        policy-file-request plz aidez moi

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown