Foros del Web » Creando para Internet » Flash y Actionscript »

Sockets con php y actionscript, no conecta

Estas en el tema de Sockets con php y actionscript, no conecta en el foro de Flash y Actionscript en Foros del Web. Hola, estoy siguiendo la siguiente guia: http://www.kirupa.com/developer/flas...ets_flash8.htm Donde creamos un script php que hace de servidor y un chat en actionscript que se comunica con ...
  #1 (permalink)  
Antiguo 13/05/2010, 10:25
 
Fecha de Ingreso: septiembre-2005
Ubicación: Valencia
Mensajes: 738
Antigüedad: 19 años, 3 meses
Puntos: 5
Pregunta Sockets con php y actionscript, no conecta

Hola, estoy siguiendo la siguiente guia:
http://www.kirupa.com/developer/flas...ets_flash8.htm

Donde creamos un script php que hace de servidor y un chat en actionscript que se comunica con este a traves de sockets.

codigo flash (el que no se conecta, AS2):
Código:
mySocket = new XMLSocket();
mySocket.onConnect = function(success) {
	if (success) {
		msgArea.htmlText += "<b>Server connection established!</b>";
	} else {
		msgArea.htmlText += "<b>Server connection failed!</b>";
	}
};
mySocket.onClose = function() {
	msgArea.htmlText += "<b>Server connection lost</b>";
};
XMLSocket.prototype.onData = function(msg) {
	msgArea.htmlText += msg;
};
mySocket.connect("192.168.1.104", 9999);
//--- Handle button click --------------------------------------
function msgGO() {
	if (inputMsg.htmlText != "") {
		mySocket.send(inputMsg.htmlText+"\n");
		inputMsg.htmlText = "";
	}
}
pushMsg.onRelease = function() {
	msgGO();
};
Shell script php (servidor, va bien):
Código PHP:
#!/usr/bin/php -q
<?php
/*
    Raymond Fain
    Used for PHP5 Sockets with Flash 8 Tutorial for Kirupa.com
    For any questions or concerns, email me at [email protected]
    or simply visit the site, www.php.net, to see if you can find an answer.
*/


// E_ALL is a named constant (bit of 2047)
// error_reporting(E_ALL) ensures any errors will be displayed
error_reporting(E_ALL);

// set_time_limit() is set to 0 to impose no time limit
set_time_limit(0);

// ob_implicit_flush() will push the whole message to flash (including any extra markups like terminating zeros)
ob_implicit_flush();

// address set to internal port for the socket to bind to and port set to something above 1024 so flash will connect
$address '192.168.1.104';
$port 9999;

//---- Function to Send out Messages to Everyone Connected ----------------------------------------
// $allclient is an array of resource id's that php will refer to for the sockets
// $socket contains the resource id for the flash client who sent the message
// $buf is just the message they sent, we are sending to everyone using a foreach loop
function send_Message($allclient$socket$buf) {
   foreach(
$allclient as $client) {
           
        
// socket_write uses the $client resource id (which calls on the socket) and sends it our message (which is the second flag)
       
socket_write($client"$socket wrote: $buf");
   }
}



//---- Start Socket creation for PHP 5 Socket Server -------------------------------------

// socket_create function is pretty simple, depending on what you want it to do, you can just rig it for that,
// AF_INET is a "kind of" default address/protocol family that I have used,
// then socket_create takes and uses SOCK_STREAM, another default available socket type, 
// and uses a SOL_TCP protocol to have a guaranteed data sending. 
if (($master socket_create(AF_INETSOCK_STREAMSOL_TCP)) < 0) {
   echo 
"socket_create() failed, reason: " socket_strerror($master) . "\n";
}

// this little beauty is hard to understand, but very useful to our kind of chat
// we want to be able to reuse our sockets, so we set our $master socket with a level at SOL_SOCKET, 
// with it reusable (SO_REUSEADDR), and a "1" in the mixed optval spot to make it true.
socket_set_option($masterSOL_SOCKET,SO_REUSEADDR1);

// now we need to bind our socket to the address and port specified.
if (($ret socket_bind($master$address$port)) < 0) {
   echo 
"socket_bind() failed, reason: " socket_strerror($ret) . "\n";
}

// to allow our socket server to listen for incoming calls made by our flash client, we need
// to use socket_listen on our $master socket. The next flag indicates that only 5 calls at a time.
// any others will be refused until there is sufficient room to process a new call.
if (($ret socket_listen($master5)) < 0) {
   echo 
"socket_listen() failed, reason: " socket_strerror($ret) . "\n";
}


// this will allow an easy way to keep track of sockets connected to our server
$read_sockets = array($master);

//---- Create Persistent Loop to continuously handle incoming socket messages ---------------------
while (true) {
   
$changed_sockets $read_sockets;
   
   
// socket_select is used here to see if there were any changes with the sockets that were connected before
   // $num_changed_sockets is here so you can check to see if the change is true or not with a subsequent function
   
$num_changed_sockets socket_select($changed_sockets$write NULL$except NULLNULL);
   
   
// we run a foreach function on $changed_sockets to see whether it needs to be added (if new), determine the message it sent
   // or determine if there was a socket disconnect
   
foreach($changed_sockets as $socket) {
           
        
// now if the $socket currently being checked is the $master socket, we need to run some checks
        // if not then we will skip down to else and check the messages that were sent
       
if ($socket == $master) {
               
            
// socket_accept will accept any incoming connections on $master, and if true, it will return a resource id
            // which we have set to $client. If this did not work then return an error, but if it worked, then add in 
            // $client to our $read_sockets array at the end.
           
if (($client socket_accept($master)) < 0) {
               echo 
"socket_accept() failed: reason: " socket_strerror($msgsock) . "\n";
               continue;
           } else {
               
array_push($read_sockets$client);
           }
       } else {
       
               
// socket_recv just receives data from $socket as $buffer, with an integer length of 2048, and a mystery flag set to 0
            // that mystery flag has no real documentation so setting it to 0 will solve it as others have done.
            // we've also set it as a var $bytes in case we need to ensure data sending with socket_write, which is optional
           
$bytes socket_recv($socket$buffer20480);
           
           
// if the $bytes we have is 0, then it is a disconnect message from the socket
           // we will just search for it as an index and unset that socket from our $read_sockets and
           // finish up with using socket_close to ensure it is closed off
           
if ($bytes == 0) {
               
$index array_search($socket$read_sockets);
               unset(
$read_sockets[$index]);
               
socket_close($socket);
           }else{
                
                
// we need to make sure $read_sockets isn't messed with, so setting up a new variable called $allclients
                // will ensure this. We then shift the array so that our $master socket is not included to the count when
                // we send our data to all the other sockets in $allclients.
                  
$allclients $read_sockets;
                   
array_shift($allclients);
                
                
// just a simple call on our premade function 'send_Message' with $allclients, $socket (current one), and $buffer (the message)
                   
send_Message($allclients$socket$buffer);
            }
       }
      
   }
}

?>
Inicio el script en php que hace de servidor desde cmd, ok, el servidor queda a la escucha.

Pero cuando flash intenta conectarse al servidor, no lo consige, y eso que he indicado la misma direccion ip y puertos en ambos.

He estado leyendo y creo que tiene que ver con la politica de sockets de adobe, he creado un archivo crossdomain.xml con el siguiente contenido:

Código:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">

<!-- Policy file for xmlsocket://socks.example.com -->
<cross-domain-policy> 

   <!-- This is a master socket policy file -->
   <!-- No other socket policies on the host will be permitted -->
   <site-control permitted-cross-domain-policies="master-only"/>

   <!-- Instead of setting to-ports="*", administrator's can use ranges and commas -->
   <!-- This will allow access to ports 123, 456, 457 and 458 -->
   <allow-access-from domain="*" to-ports="*" />

</cross-domain-policy>
Y lo he puesto en el directorio del proyecto, pero nada..

Todos los archivos estan en una carpeta en mi servidor wamp, ¿Como lo arreglo?

Gracias!
__________________
http://www.pkmrpg.es

Última edición por astut; 13/05/2010 a las 10:30
  #2 (permalink)  
Antiguo 13/05/2010, 13:30
 
Fecha de Ingreso: septiembre-2005
Ubicación: Valencia
Mensajes: 738
Antigüedad: 19 años, 3 meses
Puntos: 5
Respuesta: Sockets con php y actionscript, no conecta

Vale..

novedades..

Si pruebo la pelicula desde flash, ¡Funciona!, flash se comunica con mi servidor de php y se establece conexion y se envian mensajes perfectamente..

Pero a la hora de poner el flash en un html, no funciona... creo que es por lo de la seguridad de los sockets en php, ¡Pero busco informacion en internet y no logro solucionarlo!

¿Alguien sabria como? gracias!
__________________
http://www.pkmrpg.es
  #3 (permalink)  
Antiguo 05/10/2010, 01:12
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 19 años, 3 meses
Puntos: 12
Respuesta: Sockets con php y actionscript, no conecta

al final pudiste???

Saludos
  #4 (permalink)  
Antiguo 05/10/2010, 04:15
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Sockets con php y actionscript, no conecta

Hola
pregunto
0. con el ej de la página te funciona todo?
1. fue creado el .bat mencionado?
2. como fue creado el html? si fue desde un editor html
o se esta creando desde la publicación de flash
si es sobre esta última, con que opciones de publicación?
podrían jugar con estas opciones, tal vez alguna sea
adecuada para la aplicación

saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 28/01/2011, 20:56
 
Fecha de Ingreso: febrero-2009
Mensajes: 20
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Sockets con php y actionscript, no conecta

Si, en efecto es por el sandbox, pero a mí me queda una duda, no puedes colocar el crossdomain.xml por que no es un servidor web donde se pueda hacer una petición...

¿Entonces cuando trabajamos con sockets a un servidor que no es web como hacemos funcionar el crossdomain?
  #6 (permalink)  
Antiguo 30/01/2011, 07:45
 
Fecha de Ingreso: febrero-2009
Mensajes: 20
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Sockets con php y actionscript, no conecta

Aqui esta la solución

http://www.forosdelweb.com/f16/flash-actionscript-3-php-sockets-881126/#post3725344

saludos

Etiquetas: actionscript, php, sockets
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:44.