From: Brian Candler Date: 2009-02-12T22:09:54+09:00 Subject: Re: Ruby-newbie Terje Haarstad wrote: > require 'socket' > host = 'vortex.labs.pulltheplug.org' > port = 5842 > > s = TCPSocket.new(host, port) > buff = s.recvfrom(16)[0].chomp.unpack("I*") This is strange code. If you want to read 16 bytes, just do s.read(16). Then to see what buff is at this point you should add: puts "buff = #{buff.inspect}" #or to see in hex: puts buff.unpack("H*").first > sum = buff[0].to_i + buff[1].to_i + buff[2].to_i + buff[3].to_i puts "sum = #{sum.inspect}" > svar = [sum].pack("I") puts "svar = #{svar.inspect}" > s.puts (svar) Beware that puts() may add a newline; if that's not wanted, use write() or print() instead. > passwd = s.recvfrom(128) recvfrom is normally only used for UDP sockets. s.read(128) is probably want you want, as long as you know the server will definitely return 128 bytes and/or close the socket. Or maybe you want s.gets to get upto a newline. s.readpartial(128) will wait for at least 1 byte and then return however many are available; but there's no guarantee that the server will send its entire response in one chunk. > puts "passordet er #{passwd}" > s.close > puts "Koplet fra #{host}" ... > Okey, i get the wrong code but why the chars just before? Well, it looks like that's what the server returned to you. If you have any questions about the protocol, you'll have to talk to the people who implement or design the protocol, or look at the protocol documentation. However when I try this using telnet, I see ~16 bytes of test data, then when I send my response I just get "bzzzt, wrong". So I think your problem is using recvfrom when you should be using read. -- Posted via http://www.ruby-forum.com/.