Ruby: abrir un socket

Hoy voy a comenzar un una seria de post's sobre programación en ruby. En su día aprendí un poco este lenguaje y ahora, poco a poco hay que ir avanzando en él, para así poder hacer cosas más complejas y útiles.
El siguiente código muestra cómo abrir un socket tcp en un servidor a la escucha de una única conexión entrante.
/usr/bin/ruby -w

require 'socket'

server = TCPServer.open(4096)
loop {
     client = server.accept
     client.puts "Conexion abierta"
     print(client, " aceptado\n") 
     client.write(Time.now.ctime) 
     sleep 3
     client.write("\nCerrando la conexion\n")
     client.close
     print(client, " cerrado\n")
}

Y a continuación el código del cliente para conectarse con el servidor. Este código es también ruby, pero el socket escucha cualquier tipo de cliente.
/usr/bin/ruby -w

require 'socket'

host = '192.168.1.33'
port = 4096
server = TCPSocket.open(host, port)

while line = server.gets
  puts line.chop
end
server.close

Tras el salto, cómo se usa.
  1. Se lanza el servidor
  2. shell> ruby server.rb
      #-tcpsocket:0x24720- aceptado
      #-tcpsocket:0x24720- cerrado
  3. Se ejecutan los clientes
  4. shell> ruby client.rb 
      Conexion abierta
      Wed Oct 12 13:01:04 2011
      Cerrando la conexion

    Si se lanzan dos cliente simultáneos, primero se ejecuta uno y al terminar el otro, pero nunca simultáneamente.
    shell> ruby client.rb  
      Conexion abierta
      Wed Oct 12 13:04:44 2011
      Cerrando la conexion
    
    shell> ruby client.rb 
      Conexion abierta
      Wed Oct 12 13:04:47 2011
      Cerrando la conexion

    Se puede también lanzar una conexión al servidor con telnet, por ejemplo.
    shell> telnet localhost 4096
      Trying ::1...
      Connected to localhost.
      Escape character is '^]'.
      Conexion abierta
      Wed Oct 12 12:57:00 2011
      Cerrando la conexion
      Connection closed by foreign host.


1 comentario :

  1. ¡Muchas gracias! Quizás sería conveniente explicar brevemente las secciones del código. Aún así, la información me ha servido muchísimo.

    ResponderEliminar

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios