Comunidad de diseño web y desarrollo en internet online

FLASH + ACTIONSCRIPT 3 + PHP + Sockets

Citar            
MensajeEscrito el 29 Ene 2011 03:00 pm
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 ActionScript :

[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 ActionScript :

Security.loadPolicyFile();


Según flash para el caso de sockets debe ir así

Código ActionScript :

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 :

<?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 ActionScript :

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

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 30 Ene 2011 04:27 am
¡Lo he logrado!, así queda el AS

Código ActionScript :

_miSocket = new Socket();
_miSocket.addEventListener(Event.CONNECT,  conectado);
_miSocket.addEventListener(IOErrorEvent.IO_ERROR,  error);
_miSocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,  seguridad);
_miSocket.connect('127.0.0.1', 1500);

Como ven no tiene más que la apertura del socket
Y en el PHP seguidamente de recibir la conexión y almacenar el nuevo cliente hacemos esto

Código PHP :

$client   = socket_accept($socket); 
socket_write($client, '<cross-domain-policy><allow-access-from domain="*" to-ports="*"/></cross-domain-policy>'.chr(0x00));

La primera línea es la aceptada de la nueva conexión, chr(0x00) esto es necesario para que flash lo lea

Apenas AS se comunica con el servidor este debería proporcionar el PolicyFile, entonces lo que hacemos es escribir directamente desde el servidor al cliente un string con el contenido del PolicyFile y listo, se permite la conexión

Espero que a alguien le sirva de ayuda, y si pueden colocarle al título del POST [SOLUCIONADO] les agradecería no supe por donde cambiarlo

:D gracias

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 20 Feb 2011 06:14 pm
Gracias!. tenia el mismo problema jajaja menos mal que ví este post sino me habría tirado semanas buscando soluciones xP

Un saludo.

Por HiddenHlF

2 de clabLevel



 

chrome
Citar            
MensajeEscrito el 02 Abr 2011 02:16 pm
Disculpen que levante un tema de un mes atras, pero hace tiempo que busco un servidor socket en php para flash, podrian poner los links del codigo fuente? Se los agradeceria mucho!

Gracias!

Por aguzz

0 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Jun 2011 05:33 pm
Una preguntita, el PHP ese sería el .xml crossdomain? :S

Por Egary_Master

7 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Abr 2012 07:31 pm
buenas, tengo un servidor para el fichero de politica por el puerto 843, el cual funciona ok en windows 7 pero cuando intento correr mi app en mi Windows XP y por supuesto tengo los servers corriendo (el de la app como tal y el de politica) no corre, en la consola del servidor de la aplicacion veo que flash player lanza una peticion por el fichero de politica al server de la aplicacion, cuando debiera haber reconocido que se le envio por el port 843 el texto del fichero, aqui muestro los mensajes de la consola del servidor de politica de sockets.

--------------FUNCION mandandoCrossDomain--------------
-LEIDO -<policy-file-request/> -
-113 bytes sends / 113
-<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" to-po
rts="1024" /></cross-domain-policy> -
CONNECTION CLOSE
--------------FUNCION mandandoCrossDomain--------------

lo que se esta entre "- -" es lo que yo le mando o recibo textualmente de la o hacia la app. segun ese traceo le envio el texto del fichero al flash player pero este no me reconoce eso como un fichero de politica de sockets, repito: eso es en Windows XP, miren estos son los mensajes de la consola del servidor de la aplicacion

adicionado socket:Resource id #5
-<policy--


Como ven en este ultimo mensaje lo que recibo es el inicio de la peticion hecha por flash player para el fichero de politica de sockets,

el codigo php del servidor de politica es este:

function mandandoCrossDomain($socketConectado){
echo "\n--------------FUNCION mandandoCrossDomain--------------";

$GLOBALS["textoCrossDomain"]=file_get_contents("http://".$GLOBALS["direccion"]."/objRemoto3dSocket/crossdomain.xml");
if(!$GLOBALS["textoCrossDomain"]){
echo "error al cargar el fichero";
die();
}
$GLOBALS["textoCrossDomain"]=substr ( $GLOBALS["textoCrossDomain"], 3 );

$cantidad=strlen('<policy-file-request/>')+1;

$datos=socket_read($socketConectado,$cantidad,PHP_NORMAL_READ);
echo "\n -LEIDO -".$datos."-";

if(strpos($datos,"policy-file-request")){

$cantidad=strlen($GLOBALS["textoCrossDomain"]);
$envio=socket_send($socketConectado,$GLOBALS["textoCrossDomain"],$cantidad,'0x1');

if($envio){
echo "\n -$envio bytes sends / ".$cantidad."\n -".$GLOBALS['textoCrossDomain']."-";
}else
{
echo "\n\n- ERROR NO SE MANDO NADA-\nERROR: ".socket_strerror(socket_last_error($socketConectado))."\n\n";
die();
}
echo "\nCONNECTION CLOSE";
socket_close($socketConectado);

echo "\n--------------FUNCION mandandoCrossDomain--------------";

}
}

espero su ayuda

Por last.aldeano

0 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Oct 2012 09:54 am
Gracias!!!!!

Tu código está perfecto.
Es sorprendente ver que alguien tiene el problema y la solución y que funcionan ambos.

Ha sido simplemente poner es socket_write() al crear el cliente del socket y ha empezado a fluir todos.
Por cierto, de forma local no da ningún tipo de problema, es solo cuando el Flash se ejecuta desde un navegador.

Por emerino

0 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.