Hola, he estado jugando con Sockets en Ruby y encontré algún código de ejemplo que intenté modificar y quebrar. Quiero saber por qué está roto.Socket.recv funciona pero no se obtiene o lee?
Servidor:
require "socket"
dts = TCPServer.new('127.0.0.1', 20000)
loop do
Thread.start(dts.accept) do |s|
print(s, " is accepted\n")
s.write(Time.now)
print(s, " is gone\n")
s.close
end
end
de cliente que funciona:
require 'socket'
streamSock = TCPSocket.new("127.0.0.1", 20000)
streamSock.print("Hello\n")
str = streamSock.recv(100)
print str
streamSock.close
cliente que se rompe
require 'socket'
streamSock = TCPSocket.new("127.0.0.1", 20000)
streamSock.print("Hello\n")
str=streamSock.read #this line modified
print str
streamSock.close
Sé que el streamSock.print
es innecesaria (así como el ser esquema de nombres no ruby) pero no entiendo por qué read
no funciona mientras recv
, ¿Por qué es esto?
si alguien entendió que en el ejemplo roto tenía una dirección IP diferente. no tenga en cuenta que, me olvidé de cambiarlo al copiar y pegar – Earlz
Eche un vistazo a esta pregunta relacionada: http://stackoverflow.com/questions/1147852/ruby-tcpsocket-write-doesnt-work-but-puts-does –
Ambos tus clientes funcionan bien para mí Estoy en OS X Snow Leopard. – Hongli