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.
- Se lanza el servidor
- Se ejecutan los clientes
shell> ruby server.rb #-tcpsocket:0x24720- aceptado #-tcpsocket:0x24720- cerrado
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.
¡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.
ResponderEliminarjusto lo que buscaba gracias!
ResponderEliminar