Xmlsocket et system.security.loadpolicy
Bonjour à tous,
Bien que le sujet ait déjà été abordé dans d’autres posts, j’ai bien suivi les tutos à ce sujet mais je n’ai toujours pas de solution…
Je vous explique mon problème :
Je suis en train de développer un petit chat pour mon site web, dont le client (en flash) se connectera à un serveur distant via XMLSocket.
Le programme « serveur » et le client (SWF) ne sont pas hébergés sur le même domaine.
En local, la connexion se fait bien, mais une fois le swf uploadé chez mon hebergeur, il n’arrive pas à se connecter au serveur (hébergé chez moi).
J’essaie donc de contourner ce problème de sécurité en utilisant un crossdomain.xml chargé avec System.security.loadPolicyFile(), mais ça ne fonctionne toujours pas, j’ai du oublié quelque chose…
Voici ma config :
Le client (swf) se trouve chez mon hebergeur qu’on appellera http://mon-hebergeur.com
Le serveur se trouve sur un poste chez moi. IP local 192.XXX.XXX.XXX
Il écoute sur le port 18000.
Sur ce poste, je fais tourner également un serveur apache sur le port 81, et je place un crossdomain.xml à la racine du site.
Comme j'ai déjà du mal, je ne met pas de restriction de domaine :
Code:
1 2 3 4
|
<cross-domain-policy>
<allow-access-from domain="*" to-ports="18000"/>
</cross-domain-policy> |
Il est donc accessible en local avec http://192.XXX.XXX.XXX:81/crossdomain.xml
Pour ma connexion Internet, je passe par un routeur. IP Internet 83.XXX.XXX.XXX
J’ai donc routé toutes les arrivées sur 83.XXX.XXX.XXX :81, vers 192.XXX.XXX.XXX :81 pour accéder à mon serveur apache (et donc au fichier crossdomain via l’adresse http://83.XXX.XXX.XXX:81/crossdomain.xml), et de la même manière 83.XXX.XXX.XXX :18000, vers 192.XXX.XXX.XXX :18000 pour accéder au serveur de chat.
Côté client, voici ce que j’ai mis dans le SWF :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
// Je veux récupérer mon crossdomain pour autoriser la connexion
// socket sur une IP distante
System.security.loadPolicyFile("http://83.XXX.XXX.XXX:81/crossdomain.xml");
// ladresse de ma connexion internet, qui sera routée vers mon serveur
// local 192.XXX.XXX.XXX
var ipserveur = 83.XXX.XXX.XXX
var portserveur = 18000
// Je crée mon objet XMLSocket et je me connecte
socket = new XMLSocket();
socket.connect(ipserveur, portserveur);
socket.onConnect = connexion;
// résultat de la connexion
function connexion(verifOk )
// ici verifOk vaut false
} |
Et la connexion n’aboutie pas :( (alors qu’elle marche en local). Par contre, le crossdomain est bien accessible, car il s’affiche en tapant http://81.XXX.XXX.XXX:81/crossdomain.xml
Je ne vois pas ce qui coince, ça fait un moment que je cherche mais je tourne en rond.
Pouvez-vous me venir en aide SVP ?
PBR