2012-10-26 8 views
5

Ho trovato molti post simili qui, ma nessuno sembra affrontare il problema esatto che sto avendo.as3 XMLSocket che non richiede il file di politica

Sto solo cercando di connettere un XMLSocket al mio server, e circa 10 secondi dopo il tentativo di connessione, ottengo un SecurityErrorEvent: Errore # 2048: violazione della sicurezza sandbox (dati cannotload da ##. ##. ## . ##: 9024).

Lato server, ho uno script php che ascolta la porta 9024. Sono abbastanza sicuro che funzioni correttamente, perché posso connettermi ad esso usando altri script php. Inoltre, quando il mio php sul lato client effettua la richiesta del file di criteri, lo script del mio server restituisce la politica. Ecco l'AS3:

private var sock:XMLSocket = new XMLSocket(); 

// in my connection method 
Security.allowDomain("domain.com"); 
Security.loadPolicyFile("dubDomain.domain.com/crossdomain.xml"); 
Security.loadPolicyFile("xmlsocket://domain.com:9024"); 
sock.connect("11.11.11.11", 9024); 

ho impostato ascoltatori alla presa in AS3 prima di chiamare sock.connect, ma penso che tutto ciò che va male accada prima che potessero essere innescati.

La mia comprensione è che in entrambi i Security.loadPolicyFile secondo, o il socket.connect dovrebbe tentare di connettersi al server al socket 9024 e richiedere un file di politica. Credo che sock.connect invii solo la richiesta dopo che non è riuscita a ottenere una risposta dalla porta 843.

Sul server, tuttavia, non viene mostrato alcun tentativo di connessione. Ho provato questo dal IDE (FlashDevelop), e dal swf quando caricato sul server.

Proverei sulla porta 843, ma non ho diritti di amministratore sul mio server. Se è importante, qui è un po 'dello script php:

$client = socket_accept($sock); 
if (socket_getpeername($client, $address, $theirport)) 
{ 
echo "Client $address: $theirport is now connected to us\n"; 
} 
$input = socket_read($client, 1024000); 
echo "[client] $input"; 

$ calzino sembra essere impostato bene, come posso collegare utilizzando un altro script php, ma aspetta solo per sempre quando provo a connettermi con AS3 .

Qualche suggerimento? Sto fraintendendo qualcosa? Grazie in anticipo.

risposta

0
Security.loadPolicyFile("subDomain.domain.com/crossdomain.xml"); 
sock.connect("11.11.11.11", 9024); 

Si sta richiedendo un file crossdomain per un sottodominio. Ti permetterà, al massimo, di connetterti al sottodominio.dominio.com. Assolutamente non può permetterti di connetterti a domain.com.

Cosa farà XMLSocket, viene caricato il crossdomain dove pensa che possa essere, in relazione all'host che l'host ha fornito. Questo sarà il primo a 11.11.11.11/crossdomain.xml. Se non riesce a trovarlo, proverà ad accedere a 11.11.11.11:843. In caso di errore, verrà generato un errore di sicurezza.

Quindi, dovreste aver bisogno di connettersi direttamente al sottodominio:

sock.connect("subDomain.domain.com", 9024); 

o per aggiungere un crossdomain.xml, che permette di collegare il 11.11.11.11:9024, su 11.11.11.11/crossdomain.xml :

<allow-access-from domain="YOURSWFDOMAIN" to-ports="9024"/> 

Quindi, riceverai una richiesta da Flash sul tuo server. Allora sei bello andare.

+0

Grazie per l'aiuto, ma sfortunatamente, non funziona ancora. Ecco cosa ho in flash: Security.allowInsecureDomain (ip); \t \t \t Security.allowDomain (ip); \t \t \t Security.loadPolicyFile (ip + "/ crossdomain.xml "); \t \t \t sock.connect (ip, 9024); ip =" dominio.com "; Tutto è ora connesso al dominio, piuttosto che al sottodominio. – Tyler

+1

Ho controllato il registro sul mio server, e sembra come il file crossdomain.xml è stato prelevato, ma sto ancora ricevendo lo stesso problema. Ecco crossdomain.xml: Tyler

Problemi correlati