红宝石中的UDPSocket

时间:2012-04-20 00:44:34

标签: ruby sockets udp

我是ruby的新手,并按照“Ruby编程语言”这本书,我试图在ruby中学习一些Socket,以下是我的简单服务器/客户端:

## server

require 'socket'

server= UDPSocket.new
server.bind('localhost', 3000)
loop do
    data,address=server.recvfrom(1024)
    server.send(data.reverse,0,address[3],address[1])  ############ My problem #########
    puts "get #{data} from #{address[3]}"
end

##client
require 'socket'

ds = UDPSocket.new
#ds.connect('localhost', 3000)
while line=gets
    ds.send(line.chomp, 0,'localhost', 3000)
    response,address = ds.recvfrom(1024)
    puts response
end

注意这一行

server.send(data.reverse,0,address[3],address[1])

如果我评论这一行,似乎服务器将继续,并且不再响应客户端。

我想知道为什么?

这是否意味着UDPSocket必须对客户端做一些响应才能继续?

1 个答案:

答案 0 :(得分:2)

因为您在服务器端编写“recvfrom”,如果您对此进行注释,它将不会阻止,并且它将继续向客户端发送数据。但是,在实际情况中,通信的同行应该交换信息。