Partimos de que es la primera vez que toco un socket con php, y tengo un problemilla.
Vereis, tengo un ordenador que hace las veces de servidor de descargas y de media center (tuvimos aquí una conversación y me quedé con el Asrock ION 330 y un teclado pequeñito inalámbrico). El caso es que es un coñazo gestionarlo vía VNC y ssh.
Estuve mirando el tema de hacer un socket, para levantar sobre todo los gestores de descarga, ya que el PC arranca bastante limpio y directamente con XBMC.
Vale, tengo un socket conseguido con PHP al cual me conecto vía Telnet y ejecuto sin problemas lo que tenía pensado.
Ahora vienen los problemas. Quiero hacer una web alojada en el ordenador, con la cual pueda acceder a ese socket y hacerlo algo más dinámico que por consola, además así mato dos pájaros de un tiro y pongo los enlaces a las interfaces web de los gestores de descarga.
Estoy toqueteando php para conectarme a ese socket y ejecutar comandos. Pero solo logro conectarme al socket y leer "el saludo", el cliente se queda pensando justo despues, cuando le toca escribir y tengo que salir con ctrl+c.
La prueba debería tener estos pasos
- conectar al servidor - OK
- leer el saludo del servidor - OK
- escribir al servidor - NO
- leer la respuesta del servidor - ¿?
- desconectar del servidor -¿?
Además al salir del cliente con ctrl+c el servidor me da un error como que no puede leer (claro está a la espera del mensaje)
Código: Seleccionar todo
<?php
error_reporting(E_ALL);
/* Puerto */
$service_port = "1111";
/* IP */
$address = "192.168.1.40";
/* Creamos TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "OK.\n";
}
echo "Attempting to connect to '$address' on port '$service_port'... ";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "OK.\n";
}
/* Leemos del socket */
echo "Leyendo Saludo:\n\n";
$out = socket_read($socket, 2048);
echo $out;
/***** hasta aquí es donde llega *****/
/* Escribimos en el socket */
$msg = "Prueba de escritura";
socket_write($socket, $msg, strlen($msg));
/* leemos la contestación del socket */
$out = socket_read($socket, 2048);
echo $out;
echo "Closing socket...";
socket_close($socket);
echo "OK.\n\n";
?>
Gracias.