flash actionscript-3 sockets xmlsocket

flash - Los sockets de ActionScript 3.0 no se pueden volver a conectar



actionscript-3 xmlsocket (1)

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 compilación debe corregirse en la versión beta pública actual que se encuentra en labs.adobe.com

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

Te recomendaría dar la última versión beta pública ...

Tengo problemas para conectar (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 applet flash que necesita mantener una conexión TCP a un servidor. Implementé tiempos de espera usando temporizadores, un sistema ping-pong, etc. Sin embargo, hay un problema. Al llamar a Socket.connect (), el flash player (9.0.115 y muchos otros establos antes de eso) envía 3 solicitudes de conexión por medio de paquetes SYN, con algún tiempo entre ellos. Si ninguno de ellos recibe una respuesta (por ejemplo, porque el servidor está inactivo), no puedo hacer que el applet intente conectarse al servidor. Nunca. Es decir, dentro de la vida útil del applet.

Para aclarar y / o resumir:

Para cualquier par de host / puerto dado a Socket.connect () o XMLSocket.connect (), si la llamada falla, cualquier conexión subsiguiente () llama a cualquier otra instancia de Socket (o XMLSocket) dentro de la vida útil del applet de Flash al mismo el par host / puerto se ignora. (Al menos hasta donde puedo decir usando un sniffer de paquetes.)

Intenté llamar a numerosos métodos de Socket, destruyendo¹ y recreando los objetos, utilizando un conjunto de Sockets y varios otros métodos que no puedo recordar 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 JavaScript y dejar que vuelva a cargar mi applet. No es una solución bonita, y no voy a implementar soluciones para los problemas que causa, simplemente porque Flash no puede manejar las conexiones de socket correctamente.

Debo extrañar algo muy simple.

¿Algunas ideas?

1: Sé que en realidad no puedes destruir objetos; Simplemente borro 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 delete ).

Sí, funciona como se espera si la conexión es exitosa (incluso si la conexión cae más adelante).

El único evento para activar esto es el caso cuando el servidor no responde en absoluto; es como si Flash señala que la combinación de host / puerto está "fuera de línea" y no se molesta en enviar más paquetes durante la vida útil del applet.

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

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

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