Comunidad de diseño web y desarrollo en internet online

[Problema] Sockets AS3-PHP

Citar            
MensajeEscrito el 09 Ene 2011 06:24 pm
Buenas.
llevo 2 dias buscando por google y por mas que pruebo no se que narices pasa.. espero que alguno de vosotros pueda ayudarme.. ;). El problema es el siguiente:
tengo un servidor en PHP hecho con sockets muy básico, lo testeo utilizando el cliente telnet y puedo enviar mensajes y el servidor los recibe todos, el problema está al utilizar flash como cliente ya que me conecta al servidor y me manda un primer mensaje pero los siguientes no los envía.. dejo el código PHP y flash a continuación, espero que puedan ayudarme y gracias por adelantado.

Servidor.php:

Código PHP :

<?php

$host="***.***.*.***";
$port=1500;
set_time_limit(0);
$Server_socket=socket_create(AF_INET,SOCK_STREAM, 0);
$Server_actions=socket_bind($Server_socket,$host,$port);
$Server_actions=socket_listen($Server_socket);
echo"servidor esperando conexiones \n";
$Client_socket=socket_accept($Server_socket);
echo"nuevo cliente conectado \n";
while(true){
   $Server_read=socket_read($Client_socket,1024,1);
      echo $Server_read;
   if($Server_read==NULL){
      break;
   }
}
?>


Cliente .fla

Código ActionScript :

var host= "***.***.*.***";
var port= 1234;
var cliente:Socket = new Socket(host,port);
cliente.addEventListener(Event.CONNECT, connect_server);
mensaje.addEventListener(KeyboardEvent.KEY_DOWN, send_mensaje);
function connect_server(e:Event):void{
   trace("Conectado a [" + host + "]");
   try{
      // este mensaje si lo manda
      cliente.writeUTFBytes("mensaje enviado por nuevo Cliente\n");
   }
catch(e:IOError){
      trace(e);
   }
}
function send_mensaje(e:KeyboardEvent):void{
   if(e.keyCode==16){
      try{
      // este mensaje ya no lo manda
      cliente.writeUTFBytes("Mensaje2\n");
      }
      catch(e:IOError){
      trace(e);
      }
   }
}


Un saludo y disculpas si el mensaje es muy largo pero no podía acortarlo mas xP.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

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

chrome
Citar            
MensajeEscrito el 10 Ene 2011 04:11 pm
¿Estás en un servidor tuyo? La mayoría de los shared servers matan lo sockets de PHP por razones de seguridad

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Ene 2011 05:02 pm
Hola solisarg, utilizo localhost :/.. Así que si se te ocurre alguna idea o posible fallo en los códigos que veas :S...

Un saludo.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

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

chrome
Citar            
MensajeEscrito el 13 Ene 2011 10:24 pm
Imagino que no se debe hacer doble post pero es para decir que resolví el problema. A continuación pongo cual era el fallo por si en algún futuro a alguien le sirve .

El problema estaba en mi falta de conocimientos sobre sockets en flash ya que resulta que los mensajes que se envian con write{seguido de lo que sea} en mi caso writeUTFBytes();. Pero al enviarlos no llegan directamente sino que se almacenan en una cola hasta que se llama al metodo flush(); y, tras emplear este, si se envian asiqué añadiendo a mi codigo en esta zona flush(); se arregla y queda así:
Código :

Código ActionScript :

try{ 
      cliente.writeUTFBytes("Mensaje2\n"); 
      client.flush();
} catch(e:IOError){ 
      trace(e); 
}


espero haberme explicado medio bien al menos xP.

Un saludo.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

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

chrome

 

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