Ahi paso el codigo.
Código:
Originalmente fue para tcp, no se fijen en los comenatarios.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");
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:
y me dice este warning: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; }
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?