Problema de Socket (Java+Flex) <policy-file-request/> Erro #2048 [Resolvido]

4 respostas
alucardeck

postei no forum de RIA, mas acho q poucas pessoas acessam aquele forum e peço desculpas pelo ‘flood’,

e como muito mais pessoas acessam aqui, talvez alguem saiba a solução ^^ ##

estou com um problema com o ‘Security’ do Flash, na hora em q o XMLSocket (Flex) vai se conectar com o Socket (Java)

tenho um dominio DDNS: alucardeck.mine.nu
rodo o apache tomcat 6.0 e no ROOT dele tenho o:
policyFile.xml e o crossdomain.xml
(na verdade tenho duvida de qual nome deve ser o certo e acabei colocando os 2)
onde ambos contem o seguinte:

<?xml version="1.0"?>

Sim, está acessando na porta 80, como deveria ser.

logo, se o meu servidor estiver ligado na hora que vcs acessarem:
http://alucardeck.mine.nu/policyFile.xml ou …/crossdomain.xml
vcs conseguirão ver o arquivo lah…

feito isso, ligo minha aplicação de Servidor (Java) que instancia um objecto Socket na porta ‘alta’ 19809.

e em seguida rodo minha aplicação Flex pelo browser no seguinte link:
http://alucardeck.mine.nu/GenesisWars/
entao o aplicativo em Flex eh iniciado,
a classe XMLSocket() eh instanciada da seguinte maneira:

xmlsock = new XMLSocket(); // em seguida todos os listeners são adicionados corretamente Security.loadPolicyFile("http://alucardeck.mine.nu/crossdomain.xml"); // ou .../policyFile.xml xmlsock.connect('alucardeck.mine.nu',19809);

feito isso…
recebo no Console do meu Servidor:

Client conectou.

recebeu (201.42.129.127)

vi na net que é normal o Flex mandar esse ao tentar a conexão, indicando que ele exige um XML com o policyFile.xml em forma de String como resposta.
então envio do Java para o Flex a seguinte String:

<?xml version="1.0"?>

e entao… NADA acontece…
e um Security Error dispara no Flex após uns 5~10 segundos.

realmente nao sei mais oq fazer… jah pesquisei todos os lugares… e tem pessoas com esse erro, mas a solução deles nao resolveu a minha =/
jah tentei colocar a aplicação em Flex na pasta ROOT tb e nada…

quando eu rodo tudo isso direto em localhost… o aplicativo funciona perfeitamente.
entao sei que não é erro de ‘configuração’ entre os Sockets… jah q eles se comunicam de forma perfeita aqui.
o que ferra mesmo é quando mando pro servidor, essa porcaria de Security =[

alguem tem uma resposta?
Obrigado =]

4 Respostas

rrigoni

OPa
cara printa o conteudo do XML no socket mesmo, 'e assim que eu fa’co, ele so vai solicitar o policy-file-request quando o cliente flex estiver rodando em um host diferente do servidor que ele esta tentando comunicar, por ex no cliente dentro do browser.

Ronaldo

alucardeck

rrigoni:
OPa
cara printa o conteudo do XML no socket mesmo, 'e assim que eu fa’co, ele so vai solicitar o policy-file-request quando o cliente flex estiver rodando em um host diferente do servidor que ele esta tentando comunicar, por ex no cliente dentro do browser.

Ronaldo

opa vlw a dica… mas nao funcionou =[

continua acontecendo o seguinte…

recebo um no socket da porta 843…
e entao respondo com o XML todo…
logo em seguida de minha resposta… eu recebo um outro no socket da porta 19809…
no qual tambem respondo com o XML todo…

e entao… aguardo alguns segundos e dah o Security Error…

alguem sabe oq mais posso fazer? eh a unica coisa me impedindo de lançar o aplicativo na web =[

alucardeck

ahh depois de 1 semana preso nisso, finalmente entendi o problema…
pra quem tiver o mesmo erro #2048 futuramente vai a dica:

logo após vc aceitar a conexão Socket no seu servidor Java:

Socket s = socketServer.accept();

vc deve mandar imediatamente o policy-file.xml pelo

PrintWriter pw = new PrintWriter(s.getOutputStream()); pw.write(policyFile); pw.flush();

e qdo eu digo imediatamente… eh pra vc mandar antes de fazer qualquer coisa com o seu Socket…

algo que eu nao fazia antes… jah q logo após aceitar a conexão, eu ainda instanciava 2 classes (ClientSender e ClientListener) onde ambas jah começavam a fazer a leitura do InputStream/OutputStream do Socket, e só entao eu mandar o arquivo xml.
e parece que vc nao pode fazer leitura do que chega do Client no seu Servidor, antes de mandar o policyFile.xml, se não simplesmente dah tudo errado e o FlashPlayer entra em [color=violet]modo viadagem[/color] e não aceita mais nenhum policyFile enviado mais tarde

[Resolvido] ^^

D

Amigão estou com o mesmo problema que vc passou, poderia me mandar um demo do que vc fez

agradeço desde já

flwss galera quem tiver alguma solução tmbm agradeço bastante

flws

Criado 26 de abril de 2010
Ultima resposta 18 de nov. de 2011
Respostas 4
Participantes 3