Pergunta

Estou tendo problemas em ligar-se (através do Soquete e XMLSocket classes) para um ouvinte de TCP após um tempo limite de conexão.

Eu tenho um flash applet que precisa manter uma conexão TCP com o servidor.Eu tenho implementado limites de tempo, usando os Temporizadores, um ping-pong de sistema, etc.No entanto, há um problema.Após a chamada de Soquete.connect(), o flash player (9.0.115 e muitos outros estábulos antes que) envia 3 solicitações de conexão por meio de pacotes SYN, com algum tempo entre eles.Se nenhum desses são respondidos (e.g.porque o servidor está desligado), eu não posso começar a applet para [tentar] se conectar ao servidor.Nunca.Isto é, dentro do tempo de vida da aplicação.

Para esclarecer e/ou resumir:

Para qualquer host/porta de par dado para o Socket.ligar() ou XMLSocket.connect(), se a chamada falhar, qualquer subsequente connect() chamadas para qualquer outro Soquete (ou XMLSocket) instâncias dentro do prazo de validade do Flash applet para o mesmo host/porta par chegar ignorado.(Pelo menos tanto quanto eu posso dizer com um packet sniffer.)

Eu tentei ligar inúmeras Soquete métodos, destroying1 e recriar a objetos, utilizando um conjunto de Sockets, e vários outros métodos não me lembro direito agora;todos sem sucesso.

Minha solução atual é para notificar o pai página web através de uma chamada de JavaScript e deixá-lo recarregar minha aplicação.Não é uma solução muito, e eu não estou prestes a implementar soluções para os problemas ele faz com que, só porque o Flash não pode lidar com conexões de soquete corretamente.

Eu, deve estar faltando algo muito simples.

Qualquer idéias?

1:Eu sei que você não pode realmente destruir objetos;Eu simplesmente remover todas as referências a eles e esperar o melhor.Eu ainda não tentei invocar explicitamente o GC neste caso.(Embora eu acho que eu tentei colocar o Soquete dentro de uma Matriz e utilizando apagar.)


Sim, ele funciona como esperado se a conexão for bem-sucedida (mesmo se a conexão cair mais tarde.)

O evento apenas para acionar este é o caso quando o servidor não responde a todos;é como se o Flash marca o host/porta de combinação como "offline" e não se preocupe em enviar mais pacotes para o tempo de vida da aplicação.

Eu suspeito que um ativo recusa da conexão (por exemplo,host está online, mas não ouvir a porta) não causa isso.

Eu não recebo a mensagem de erro ou de feedback de qualquer outro tipo de Soquete.

Você já chamada connect() mais de uma vez para o mesmo host/porta de par, quando o primeiro falhou?Como é que você sabe que o primeiro connect() falhou?E antes subsequentes chamadas connect (), você fez alguma coisa para repor o soquete?

Foi útil?

Solução

Isso pode estar relacionado com o bug não resolvido FP-269 que por sua vez podem ter a mesma causa como FP-67.

Esta compilação deve ser fixado em atual versão beta público encontrada no labs.adobe.com

Edwin Wong - [09/23/08 04:49 PM ]

Eu recomendo que você dê o mais recente versão beta pública um tiro...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top