我试图继续循环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
答案 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}"