socket recv or gets?

J

Jamal Soueidan

Hello there,

I wonder whats the difference between these methods ( gets and recv )

loop {
data = current_client.recv(100)
puts data
}

When I use "gets" instead of recv my socket connection stops and never
print out the message?

Why? :D

Thanks..
 
R

Robert Klemme

Hello there,

I wonder whats the difference between these methods ( gets and recv )

loop {
data = current_client.recv(100)
puts data
}

When I use "gets" instead of recv my socket connection stops and never
print out the message?

Why? :D

See documentation. #gets tries to read a line (i.e. until it sees a line
terminator). Also, I believe recv also works with UDP while I am not
sure about gets.

Cheers

robert
 
J

Jamal Soueidan

Robert said:
See documentation. #gets tries to read a line (i.e. until it sees a line
terminator). Also, I believe recv also works with UDP while I am not
sure about gets.

Cheers

robert

Hmm, I looked before at documentation and they wrote...

"A separator of nil reads the entire contents..."

so I did :)

@data = gets()

But my code stops after that and wouldn't continue? even though
gets(nil) is the same, I also tried that, didn't work.
 
T

twinandi

Jamal said:
so I did :)

@data = gets()

in analogy to your recv-Example it should look like:
loop {
      data = current_client.gets
      puts data
}

;)
Andi
 
J

Jamal Soueidan

unknown said:
in analogy to your recv-Example it should look like:
loop {
      data = current_client.gets
      puts data
}

;)
Andi

This doesn't work :)

I also tried

while(data = gets)
p data
end

The code doesn't continue :(
 
R

Robert Klemme

Hmm, I looked before at documentation and they wrote...

"A separator of nil reads the entire contents..."

so I did :)

@data = gets()

Look again. http://www.ruby-doc.org/core/classes/IO.html#M002297

Note, that instead of gets(nil) you can as well use read.
But my code stops after that and wouldn't continue? even though
gets(nil) is the same, I also tried that, didn't work.

You need to understand blocking IO: the IO operation blocks until
everything is read. In case of a socket, it will only return if there
was an error or the other party closed the socket. So, you need to
define the protocol in a way that you either know beforehand how much
you need to read (then you can use read(length) or recv(length)) or you
need a separator that you can use to recognize message end (then you can
use gets(separator)).

Kind regards

robert
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,197
Messages
2,571,041
Members
47,643
Latest member
ashutoshjha_1101

Latest Threads

Top