Hi,
I'm writing a little tcp-client which connects to a tcp-server, sends a command and recieves an answer. If I do something like that:
#!/usr/bin/env ruby
$VERBOSE=true
require 'socket'
...
begin
socket = TCPSocket.new($ip,$port)
rescue
puts "error: #{$!}"
exit 1
end
socket.print command
answer=socket.gets
socket.close
It works if the server sends just one line. But I don't know how many lines the server answers. So I tried something like that:
answers=
while answer=socket.gets
answers<<answer
end
But this results in the while-loop never ending. Even if just one line is the answer the while loop does simply never end Any idea how to do this?
Basically you need to define a protocol of your own which handles
this. There are many ways to do that. One option is to define that
there will be only one line ever. Another option is to include
something in each like which indicates whether there is more to
follow. Yet another option is to define a terminator sequence and use
gets or IO#each with terminator argument similar to this: