Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/12/2009, 13:12
Avatar de el_gustavo
el_gustavo
 
Fecha de Ingreso: mayo-2009
Mensajes: 117
Antigüedad: 15 años
Puntos: 0
Tengo que hacer un servidor udp que envie y reciba informacion ("comandos") y por alguna razon no lo puede enviar, estoy tratando de probarlo en la red local pero tampoco funciona.
Ahi paso el codigo.
Código:
if (!extension_loaded('sockets')) {
    die('SKIP The sockets extension is not loaded.');
}

print_log("Arranca el script");
set_time_limit (0);
// Set the ip and port we will listen on
$address_host = SERVER_HOST;
$port = SERVER_PORT;
$max_clients = SERVER_MAX_CLIENT;/*no sirve*/
error_reporting(E_ALL | E_STRICT);

// Array that will hold client information
//$clients = Array();

// Create a TCP Stream socket
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);/*abrir el socket*/

if(!$sock){
    print_log("Error al crear el socket".socket_strerror(socket_last_error()));
    exit(1);
}
print_log("Se creo el socket correctamente");

// Bind the socket to an address/port
socket_bind($sock, $address_host, $port) or die('Could not bind to address');
print_log("Se asocio el socket con el puerto y direccion correctamente");
print_log($address_host.":".$port);

$string = "MENSAJE";
$envio = socket_sendto($sock,$string,strlen($string),0,"192.168.0.107",$port);
        if(!$envio){
            print_log("Error envio de SETTIME   ".socket_strerror(socket_last_error()));
            exit(1);
        }
        print_log("Envio:".$string);
// Start listening for connections
/*socket_listen($sock);*/
$count_session = 0;
// Loop continuously
 // end while
// Close the master sockets
while(true){
    $mensaje_recibido ="";
    $count_session++;
    $from="";
    $recibo = false;
    $port = 0;
    //print_log ("INIT SESION ".$count_session." ****");
    print_log ("INIT SESION ".$count_session." ****");
    $recibo = socket_recvfrom($sock,$mensaje_recibido,100,0,$from,$port);
    if(!$recibo){
        /*que salga que salga si hay error, despues lo arrancameos*/
        print_log("Error recibo de datos    ".socket_strerror(socket_last_error()));
        exit(1);
    }else{
        print_log("Sesion:".$count_session." -Leyendo mensaje ---");
        $input = trim($mensaje_recibido);
        print_log("Sesion:".$count_session." -Procesando mensaje ---");
       $output= process_request($sock,$input,$recibo,$from,$port);
       $envio = socket_sendto($sock,$output,strlen($output),0,"192.168.0.107",$port);
        if(!$envio){
            print_log("Error envio de DATOS   ".socket_strerror(socket_last_error()));
            exit(1);
        }
    }


    
    
    /*Qizas debamos de dejar de imprimir, por ahora que imprima*/
}
socket_close($sock);
print_log("Cerramos Socket y salimos del programa");
Originalmente fue para tcp, no se fijen en los comenatarios.
El problema es que en ningun momento me dice error pero se "tilda", es posible que haya algun error de sintaxis pero eso seria porque "copie" mal el codigo,
El hecho que me importa es que no envia ni recibe datos, llega hasta donde dice print_log ("INIT SESION ".$count_session." ****") pasando antes por send; y de ahi no avanza, no se como solucionarlo (la verdad es la primera vez que programo en socket).
Los puertos son los mismos tanto en remoto como en local.
Si alguien me ayuda estare muy agradecido, gracias por su colaboracion.

Agrege esta funcion
Código:
function comprobar_puerto($server,$port)
{
   # // Dominio a comprobar

 $b = false;
 $fp = fsockopen($server,$port,$errno,$errstr,10);
    if($fp)
    {
    fclose($fp);
    $b = true;
    }
  return $b;
}
y me dice este warning:
Warning: fsockopen() [function.fsockopen]: unable to connect to 127.0.0.1:19810 (Se produjo un error durante el intento de conexión ya que la parte conectada no respondió adecuadamente tras un periodo de tiempo, o bien se produjo un error en la conexión establecida ya que el host conectado no ha podido responder. ) in

Deberia aceptar el puerto?? o sea, esa comprobacion deberia ser exitosa? hace falta que sea exitosa?

Última edición por GatorV; 31/12/2009 a las 16:43