Pregunta

Tengo problemas para conectarme (a través de las clases Socket y XMLSocket) a un escucha TCP después de un tiempo de espera de conexión.

Tengo un subprograma flash que necesita mantener una conexión TCP con un servidor.He implementado tiempos de espera mediante Timers, sistema de ping-pong, etc.Sin embargo, hay un problema.Al llamar a Socket.connect(), el reproductor flash (9.0.115 y muchos otros estables anteriores) envía 3 solicitudes de conexión a través de paquetes SYN, con algo de tiempo entre ellas.Si no se responde a ninguna de ellas (p. ej.porque el servidor no funciona), no puedo hacer que el subprograma [intente] conectarse al servidor.Alguna vez.Es decir, dentro de la vida útil del subprograma.

Para aclarar y/o resumir:

Para cualquier par de host/puerto proporcionado a Socket.connect() o XMLSocket.connect(), si la llamada falla, cualquier llamada posterior de connect() a cualquier otra instancia de Socket (o XMLSocket) dentro de la vida útil del subprograma Flash al mismo par host/puerto se ignoran.(Al menos hasta donde yo sé usando un rastreador de paquetes).

Intenté llamar a numerosos métodos de Socket, destruir¹ y recrear los objetos, usando un grupo de Sockets y varios otros métodos que no recuerdo en este momento;todo fue en vano.

Mi solución actual es notificar a la página web principal a través de una llamada de JavaScript y dejar que recargue mi subprograma.No es una solución bonita y no voy a implementar soluciones alternativas para los problemas. él causas, simplemente porque Flash no puede manejar las conexiones de socket correctamente.

Debo estar perdiendo algo muy simple.

¿Algunas ideas?

1:Sé que realmente no se pueden destruir objetos;Simplemente elimino todas las referencias a ellos y espero lo mejor.No he intentado invocar explícitamente el GC en este caso.(Aunque creo que intenté poner el Socket dentro de una matriz y usar borrar.)


Sí, funciona como se esperaba si la conexión se realiza correctamente (incluso si la conexión se interrumpe más adelante).

El único evento que desencadena esto es el caso en el que el servidor no responde en absoluto;es como si Flash marcara la combinación host/puerto como "fuera de línea" y no se molestara en enviarle más paquetes durante la vida útil del subprograma.

Sospecho de un rechazo activo de la conexión (p. ej.el host está en línea pero no escucha el puerto) no causa esto.

No recibo ningún mensaje de error ni comentarios de ningún otro tipo del Socket.

¿Alguna vez ha llamado a connect() más de una vez al mismo par de host/puerto cuando el primero falló?¿Cómo supiste que la primera conexión () falló?Y antes de las siguientes llamadas a connect(), ¿hiciste algo para restablecer el socket?

¿Fue útil?

Solución

Esto podría estar relacionado con el error no resuelto. FP-269 que a su vez puede tener la misma causa raíz que FP-67.

Esta construcción debe solucionarse en la versión beta pública actual que se encuentra en laboratorios.adobe.com

Edwin Wong - [23/09/08 16:49]

Te recomiendo que le des el última beta pública un disparo...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top