[Rubies] Ayuda con sockets.

2 views
Skip to first unread message

Protos Hack

unread,
May 13, 2008, 4:31:41 PM5/13/08
to rub...@listas.escomposlinux.org
Hola, es la primera vez que entro en la lista, y me parece una muy buena iniciativa, de ahora en adelante intentaré pasar seguido por aquí para que crezca la comunidad de habla hispana de Ruby, ya que de momento cuesta encontraros xD!

Bueno, despues de las presentaciones mi duda:
He estado leyendo documentación sobre sockets, pero como mi nivel de inglés no es demasiado bueno, no he conseguido entender muy bien todo. Buscando por la red encontré este trozo de code de Perl que me sirve:

SOCKET->autoflush();
open(STDIN, ">&SOCKET");
open(STDOUT,">&SOCKET");
open(STDERR,">&SOCKET");
Ahora necesito pasarlo a Ruby.
Muchas gracias

Protos Hack

unread,
May 13, 2008, 4:31:41 PM5/13/08
to rub...@listas.escomposlinux.org

Protos Hack

unread,
May 13, 2008, 4:31:41 PM5/13/08
to rub...@listas.escomposlinux.org

Silvio Quadri

unread,
May 13, 2008, 5:18:55 PM5/13/08
to Protos Hack, rub...@listas.escomposlinux.org


2008/5/13 Protos Hack <prot...@gmail.com>:
_______________________________________________
Rubies mailing list
Rub...@listas.escomposlinux.org
https://listas.escomposlinux.org/mailman/listinfo/rubies


Hola y bienvenido!
Ya hemos cruzado algunos mails en la lista de RoR por este tema ... Como corresponde, seguimos por acá!

No conozco Perl ... podrías explicar qué hacen esas funciones o qué es lo que querés hacer con eso. (no lo entendí del hilo de aquella lista).

Saludos!
Silvio


--
Silvio Quadri

David Cuadrado

unread,
May 13, 2008, 6:36:25 PM5/13/08
to Protos Hack, rub...@listas.escomposlinux.org
parece que las respuestas van directamente al autor y no a la lista...

estas programando un servidor que conecta a los clientes con algun
programa? por ejemplo mira este servidor ls sencillo:

#!/usr/bin/env ruby

require 'socket'

server = TCPServer.new('0.0.0.0', 6666)

while session = server.accept
$stdout.reopen(session)
session.close
system("ls")
end

On 5/13/08, Protos Hack <prot...@gmail.com> wrote:
> El día 13 de mayo de 2008 22:43, David Cuadrado <kra...@gmail.com>
> escribió:
>
> > Hola,
> >
> > esta es la primera vez que escribo tambien =P
> >
> > si lo que quieres es redireccionar las salidas al socket puedes usar
> > la funcion IO#reopen, por ejemplo:
> >
> > $stdout.reopen(s);
> > $stderr.reopen(s);
> > $stdin.reopen(s);
> >
> > saludos,
> >
> > Si, creo que es eso lo que me interesa, he probado y no se como hacerlo
> > funcionar, me podrias explicar un poco mejor como funciona porfavor??
> >
>
> Muchas gracias. Saludos
>
> >
> >
> >
> > --
> > David Cuadrado
> >
>


--
David Cuadrado

vruz

unread,
May 13, 2008, 6:41:09 PM5/13/08
to Protos Hack, rub...@listas.escomposlinux.org
envío de nuevo con copia a la lista.
(no se por qué falla ?)

On Tue, May 13, 2008 at 5:41 PM, vruz <horaci...@gmail.com> wrote:
el ejemplo mas basico de todos, un servidor horario

primero el servidor que acepta conexiones en el puerto 20000.
crea un hilo de ejecucion por cada nueva conexion.
apenas acepta una nueva conexion, le envia la hora
actual al cliente.

# servidor.rb
require "socket"
dts = TCPServer.new('localhost', 20000)
loop do
Thread.start(dts.accept) do |s|
print(s, " aceptado\n")
s.write(Time.now)
print(s, " se ha desconectado\n")
s.close
end
end

el cliente busca conectarse al servidor en el puerto 20000
(obviamente el servidor debe estar ejecutandose para que
el cliente funcione)
apenas logra una conexion, el cliente lee hasta 100 bytes
de datos, los muestra en la salida estándar y luego
se desconecta.

# cliente.rb
require 'socket'
streamSock = TCPSocket.new( "127.0.0.1", 20000 )
str = streamSock.recv( 100 )
print str
streamSock.close

espero que sirva para iniciarte

> > _______________________________________________
> > Rubies mailing list
> > Rub...@listas.escomposlinux.org
> > https://listas.escomposlinux.org/mailman/listinfo/rubies
> >
> >
>
>
>

> --
> ---- vruz
>

--
---- vruz

David Cuadrado

unread,
May 14, 2008, 7:11:35 PM5/14/08
to rub...@listas.escomposlinux.org
stdout: salida estandar
$stdout << "hola mundo"

stderr: salida de error estandar
$stderr << "hola salida de error"

stdin: entrada estandard
linea = $stdin.readline
$stdout.puts(linea)

en el ejemplo redireccionada la salida estandard al socket


On 5/14/08, Protos Hack <prot...@gmail.com> wrote:
> Si, gracias, creo que eso es lo que necesito. Pero me quedan dudas los std (
> stdin, stdou y stderr) que es exactamente lo que hacen? En tu ejemplo parece
> que el stdout lo que ha hecho es asociar la consola al socket y hacer un ls
> no? Que hace exactamente stdin stdout y stderr?
>
> Muchas gracias!

Reply all
Reply to author
Forward
0 new messages