Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/01/2011, 09:06
jugokus
 
Fecha de Ingreso: febrero-2009
Mensajes: 20
Antigüedad: 15 años, 10 meses
Puntos: 0
FLASH + ACTIONSCRIPT 3 + PHP + Sockets

Buen día, revise bastante el foro y siempre me encontré con el mismo final con respecto a este tema.

Teniendo un servidor PHP, al conectar a flash con las clase "socket", si lo hacemos probando la película en flash conecta, pero si vamos a HTML no conecta, el error que arroja es:
Código:
[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]
Ahora bien, me canse de probarlo en localhost, actualmente tengo el servidor corriendo en mi hosting, una ip a la que se puede acceder de cualquier maquina, igual, el error continua, dudo que sea el socket en PHP, puesto que desde el entorno de pruebas de flash funciona perfectamente

Una de las dudas que tengo es con la función
Código:
Security.loadPolicyFile();
Según flash para el caso de sockets debe ir así
Código:
Security.loadPolicyFile("xmlsocket://ip:puerto");
Pero se debe especificar así "xmlsocket://ip:puerto" o así "xmlsocket://ip:puerto/crossdomain.xml"? según flash cuando uno conecta con socket inmediatamente consulta el puerto 843 en busca del crossdomain, en esta acción envía esto al servidor "<policy-file-request/>", sabiendo esto corrí adicionalmente un server en el puerto 843 y en ningún momento se conectaba ningún cliente, me dio la impresión que ni intenta verificar si existe el crossdomain.

Cuando se intenta conectar desde HTML lo logra, pero el servidor luego de unos segundos dice
Código:
nuevo cliente conectado
Warning: socket_read(): unable to read from socket [104]: Connection reset by peer 
Warning: socket_recv(): unable to read from socket [107]: Transport endpoint is not connected
Con esto se me ocurre que la conexión se realiza pero no existen "permisos" para leer los datos del cliente

Otro detalle que me llamo la atención es "Security.sandboxType", esto es una propiedad READONLY, pero tiene varios valores con respecto al sandbox, nunca entendí como cambiar esta propiedad

Les contare como voy actualmente
Publish settings: access network only
crossdomain.xml:
Código:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
	<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>
actionscript:
Código:
Security.allowDomain("midominio.com");
Security.loadPolicyFile("midominio.com/crossdomain.xml");
_miSocket = new Socket();
_miSocket.addEventListener(Event.CONNECT,  conectado);
_miSocket.addEventListener(IOErrorEvent.IO_ERROR,  error);
_miSocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,  seguridad);
_miSocket.connect('ip_dominio', puerto);
Esta persona dice que lo pudo lograr: http://www.actionscript.org/forums/showthread.php3?t=171826

Bueno hasta acá he llegado, no lo he podido lograr fuera del entorno de flash, si alguien logro solucionarlo le agradecería muchísimo, si logro que funcione les comentare como.

Gracias