Ruby while循环只使用break if语句执行一次

时间:2014-12-10 10:42:15

标签: ruby rhomobile

我试图继续循环3次。如果我从服务器获取数据,循环应该中断。但是在下面的代码中,while循环在响应一次后终止。我该怎么办?

@i = 0
while @i < 3
  udp_socket.send req_param[:msg], req_param[:flag], req_param[:url], req_param[:port]
    @i +=1
    puts "#{@i}"
    if udp_socket.recvfrom(100)
      break
    end
end 
  for j in 0..1
  resp = udp_socket.recvfrom(100)
  puts "resp:#{resp.inspect}"
 end
udp_socket.close
return resp

2 个答案:

答案 0 :(得分:0)

recvfrom(继承自父IPSocket)将阻塞,直到获取数据(除非设置了nonblock选项)。这意味着它将是一个非虚假的回报,并打破。它将一直等到有数据并中断。

也许你打算不阻止? - 改为调用recvfrom_nonblock方法?

答案 1 :(得分:0)

通过查看代码,您似乎没有在resp循环中更新while变量,而是将代码更改为此类代码:

j = 1
resp = udp_socket.recvfrom(100)
if resp
  udp_socket.close
  return resp
end
while j < 3
  udp_socket.send req_param[:msg], req_param[:flag], req_param[:url], req_param[:port]
  resp = udp_socket.recvfrom(100)
  j += 1
  puts "ok"
  break if resp  
end
puts "resp:#{resp.inspect}"