Programando Sockets con PHP…

Standard

Esta es una breve introducción de uso de Socket con PHP, dare dos ejemplos sencillos, uno de conexion y otro intercambiando ya información utilizando Socket.

Que es un socket?

Socket designa un concepto abstracto por el cual dos programas (posiblemente situados en computadoras distintas) pueden intercambiar cualquier flujo de datos, generalmente de manera fiable y ordenada.

Un Socket queda definido por una dirección IP, un protocolo de transporte y un número de puerto.

Osea, en pocas palabras, para conectar un proceso X con un proceso Y en otra maquina, el proceso X deberá crear un Socket con la dirección IP del proceso Y. También, como en una maquina, existen mas de un proceso, deberá indicarle en que puerto atiende el proceso Y. Por ejemplo para conectarnos a un FTP utilizamos por defecto el puerto 21, asi cada aplicacion tiene asignado un numero de puerto.

Listo, basta de introduccion y vamos a crear un socket para conectarnos con Google.

<?php
/*
 *http://www.php.net/manual/en/ref.sockets.php
 */

$host = "www.google.com";

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$puerto = 80;

if (socket_connect($socket, $host, $puerto))
{
    echo "\nConexion Exitosa, puerto: " . $puerto;
}
else
{
    echo "\nLa conexion TCP no se pudo realizar, puerto: ".$puerto;
}
socket_close($socket);
?>

Obviamente, obtendremos “Conexion Exitosa, puerto: 80″, por que obviamente? por que en el puerto 80 lo utiliza el Protocolo de Transferencia de HiperTexto, la conocida World Wide Web.

Si quieren enteder los parametros de socket_create( int $domain , int $type , int $protocol), visiten el manual de la pagina oficial que esta clarisimo, lo estaba por explicar pero mas claro que esto no hay.

En el ejemplo anterior, realizamos una simple conexión, ahora vamos a mandarle un helo y ver que nos devuelve el servidor Web de Google.

<?php

//http://www.php.net/manual/en/ref.sockets.php

$host = "www.google.com";

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

$puerto = 80;
$conexion = socket_connect($socket, $host, $puerto);

if($conexion)
{
    echo "Conexion Exitosa, puerto: " . $puerto."\n\n";
    
    $buffer = "helo $host\r\n";
    $salida = ' ';

    socket_write($socket, $buffer);

    while ($salida = socket_read($socket, 2048))
    {
        echo $salida;
    }
}
else
{
    echo "\nLa conexion TCP no se pudo realizar, puerto: ".$puerto;
}

socket_close($socket);
?>

Y obtenemos esto…

Conexion Exitosa, puerto: 80

HTTP/1.0 400 Bad Request
Content-Type: text/html; charset=UTF-8
Content-Length: 1350
Date: Fri, 06 Aug 2010 01:09:40 GMT
Server: GFE/2.0

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>400 Bad Request</title>
<style><!--
body {font-family: arial,sans-serif}
div.nav {margin-top: 1ex}
div.nav A {font-size: 10pt; font-family: arial,sans-serif}
span.nav {font-size: 10pt; font-family: arial,sans-serif; font-weight: bold}
div.nav A,span.big {font-size: 12pt; color: #0000cc}
div.nav A {font-size: 10pt; color: black}
A.l:link {color: #6f6f6f}
A.u:link {color: green}
//--></style>
<script><!--
var rc=400;
//-->
</script>
</head>
<body text=#000000 bgcolor=#ffffff>
<table border=0 cellpadding=2 cellspacing=0 width=100%><tr><td rowspan=3 width=1% nowrap>
<b><font face=times color=#0039b6 size=10>G</font><font face=times color=#c41200 size=10>o</font><font face=times color=#f3c518 size=10>o</font><font face=times color=#0039b6 size=10>g</font><font face=times color=#30a72f size=10>l</font><font face=times color=#c41200 size=10>e</font>&nbsp;&nbsp;</b>
<td>&nbsp;</td></tr>
<tr><td bgcolor="#3366cc"><font face=arial,sans-serif color="#ffffff"><b>Error</b></td></tr>
<tr><td>&nbsp;</td></tr></table>
<blockquote>
<H1>Bad Request</H1>
Your client has issued a malformed or illegal request.
<p>
</blockquote>
<table width=100% cellpadding=0 cellspacing=0><tr><td bgcolor="#3366cc"><img alt="" width=1 height=4></td></tr></table>
</body></html>

Claro, Google no entiende un joraca lo que le estamos mandando, por eso nos da un error 400 Bad Request.

Les dejos unos links para que sigan investigando sobre le tema.

Salutes…, comentar es agradecer.

FB Comentarios

19 thoughts on “Programando Sockets con PHP…

  1. Pingback: No Soy Normal!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>