Dima,
You're connecting to the server using HTTP, so the server should
return valid HTTP header, i.e.:
class TimeServer < GServer
def initialize(port=10001, *args)
super(port, *args)
end
def serve(io)
str = "HTTP/1.0 200 OK\r\n\r\n#{Time.now.to_i}"
puts str
io.puts(str)
end
end
Haven't tried it on Windows, but this works on Mac whereas your
version fails as you described.
Best,
Mike Dvorkin
http://www.rubywizards.com
On Sep 22, 2006, at 3:01 PM, Dmitri Kondratiev wrote:
> Hello,
> I am running Ruby 1-185-21 on Win XP without any proxy enabled.
> When trying to connect to HTTP server (both server and client are my
> Ruby scripts) at *localhost* I get this error:
> "
> c:/usr/ruby/lib/ruby/1.8/net/protocol.rb:133:in `sysread': An existing
> connection was forcibly closed by the remote host. (Errno::ECONNRESET)
> "
>
> Interesting facts:
> 1) Firefox works without any problems with my Ruby server!!!
> 2) IE doesn't work with my Ruby server!!!
> 3) My client works fine with all other HTTP servers on the Internet,
> except for my Ruby server on localhost :(
>
> (see bellow complete trace of this error and source of my simple
> server
> and client)
>
> Any ideas?
> Thanks,
> Dima
> <pre>
> === localhost error trace:
>
> ruby test-serv.rb localhost 10001
> [Sat Sep 23 01:22:16 2006] TimeServer 127.0.0.1:10001 start
> Server started...
> Connecting to server localhost:10001 at Sat Sep 23 01:22:21 +0400 2006
> [Sat Sep 23 01:22:21 2006] TimeServer 127.0.0.1:10001 client:1203
> localhost<127.0.0.1> connect
> [Sat Sep 23 01:22:21 2006] TimeServer 127.0.0.1:10001 client:1203
> disconnect
> [Sat Sep 23 01:22:21 2006] TimeServer 127.0.0.1:10001 stop
> c:/usr/ruby/lib/ruby/1.8/net/protocol.rb:133:in `sysread': An existing
> connection was forcibly closed by the remote host. (Errno::ECONNRESET)
> from c:/usr/ruby/lib/ruby/1.8/net/protocol.rb:133:in
> `rbuf_fill'
> from c:/usr/ruby/lib/ruby/1.8/timeout.rb:56:in `timeout'
> from c:/usr/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout'
> from c:/usr/ruby/lib/ruby/1.8/net/protocol.rb:132:in
> `rbuf_fill'
> from c:/usr/ruby/lib/ruby/1.8/net/protocol.rb:116:in
> `readuntil'
> from c:/usr/ruby/lib/ruby/1.8/net/protocol.rb:126:in
> `readline'
> from c:/usr/ruby/lib/ruby/1.8/net/http.rb:2017:in
> `read_status_line'
> from c:/usr/ruby/lib/ruby/1.8/net/http.rb:2006:in `read_new'
> from c:/usr/ruby/lib/ruby/1.8/net/http.rb:1047:in `request'
> from c:/usr/ruby/lib/ruby/1.8/net/http.rb:1034:in `request'
> from c:/usr/ruby/lib/ruby/1.8/net/http.rb:543:in `start'
> from c:/usr/ruby/lib/ruby/1.8/net/http.rb:1032:in `request'
> from c:/usr/ruby/lib/ruby/1.8/net/http.rb:769:in `get'
> from test-serv.rb:35
>
> === no error trace:
>
> C:\wks\ruby-wks>ruby test-serv.rb www.rubycentral.com 80
> Connecting to server www.rubycentral.com:80 at Sat Sep 23 01:29:28
> +0400
> 2006
> Code: 200 Msg: OK
> Connecting to server www.rubycentral.com:80 at Sat Sep 23 01:29:34
> +0400
> 2006
> Code: 200 Msg: OK
>
> === source:
> require 'gserver'
> require 'net/http'
>
> TIME_OUT = 5
> host = ARGV[0]
> port = ARGV[1]
>
>
> if host == 'localhost' then
> #
> # A server that returns the time in seconds since 1970.
> #
>
> class TimeServer < GServer
> def initialize(port=10001, *args)
> super(port, *args)
> end
> def serve(io)
> io.puts(Time.now.to_i)
> end
> end
>
> # Run the server with logging enabled (it's a separate thread).
> server = TimeServer.new
> server.audit = true # Turn logging on.
> server.start
> puts "Server started...\n"
> end #host == 'localhost'
>
> # Test server
> while (true)
> sleep TIME_OUT
> puts("Connecting to server #{host}:#{port} at #{Time.now}\n")
> h = Net::HTTP.new(host,port)
> res, data = h.get('/index.html', nil )
> puts("Code: #{res.code} Msg: #{res.message}\n")
> end
> </pre>
>
> --
> Posted via http://www.ruby-forum.com/.
>