2012-10-26 8 views
5

Znalazłem wiele podobnych postów tutaj, ale żaden nie wydaje się odpowiadać dokładnie temu problemowi.as3 XMLSocket nie żąda pliku zasad

Po prostu próbuję podłączyć XMLSocket do mojego serwera, i około 10 sekund po próbie połączenia, otrzymuję SecurityErrorEvent: Błąd # 2048: naruszenie bezpieczeństwa piaskownicy (nie mogę pobrać danych z ##. ##. ## ##: 9024).

Po stronie serwera, mam skrypt php, który nasłuchuje na porcie 9024. Jestem prawie pewny, że działa poprawnie, ponieważ mogę połączyć się z nim za pomocą innych skryptów php. Ponadto, gdy mój php po stronie klienta tworzy żądanie pliku zasad, mój skrypt serwera zwraca zasadę. Oto 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); 

ustawić słuchaczy do gniazda w AS3 przed wywołaniem sock.connect, ale myślę, że cokolwiek pójdzie źle się dzieje, zanim zostaną one wywołane.

Rozumiem, że na drugim Security.loadPolicyFile lub socket.connect powinien spróbować połączyć się z serwerem przy gniazdku 9024 i zażądać pliku zasad. Sądzę, że sock.connect wysłałby żądanie tylko wtedy, gdy nie otrzyma odpowiedzi z portu 843.

Po stronie serwera widać jednak, że nigdy nie uda się nawiązać połączenia. Próbowałem tego z IDE (FlashDevelop) i ze SWF po przesłaniu na serwer.

Spróbowałbym go na porcie 843, ale nie mam uprawnień administratora na moim serwerze. Jeżeli ma to znaczenie, tutaj jest nieco skryptu 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"; 

$ skarpetka wydaje się być ustawione w porządku, jak mogę połączyć się przy użyciu innego skryptu php, ale to po prostu czeka na zawsze, gdy próbuję się połączyć z AS3 .

Wszelkie sugestie? Czy coś nie rozumiem? Z góry dziękuję.

Odpowiedz

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

Żądasz pliku crossdomain dla poddomeny. Pozwoli ci to maksymalnie połączyć się z subdomain.domain.com. To absolutnie nie pozwala na łączenie się z domeną.

Co zrobi XMLSocket, to ładuje crossdomain tam, gdzie myśli, że może być, związany z adresem IP hosta, który podałeś. To będzie pierwsze w 11.11.11.11/crossdomain.xml. Jeśli nie może go znaleźć, spróbuje uzyskać dostęp do 11.11.11.11:843. Jeśli to się nie powiedzie, wyświetli się błąd bezpieczeństwa.

Więc albo trzeba podłączyć bezpośrednio do subdomeny:

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

lub dodania crossdomain.xml, który pozwala na podłączenie na 11.11.11.11:9024 na 11.11.11.11/crossdomain.xml :

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

Następnie otrzymasz żądanie z pamięci flash na swoim serwerze. W takim razie jesteś dobry.

+0

Dzięki za pomoc, ale niestety nadal nie działa. Oto, co mam teraz w wersji flash: Security.allowInsecureDomain (ip); \t \tSecurity.allowDomain (ip); \t \t \t Security.loadPolicyFile (ip + "/ crossdomain.xml "); \t \t \t sock.connect (ip, 9024), ip =" domena.com ", wszystko łączy się teraz z domeną, a nie z subdomeną – Tyler

+1

Sprawdziłem dziennik na moim serwerze i wygląda podobnie jak plik crossdomain.xml jest pobierany, ale nadal mam ten sam problem. Oto crossdomain.xml: Tyler