3

我是 ruby​​ 新手,并遵循“The Ruby Programming Language”一书,我正在尝试学习 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必须对客户端进行一些响应才能继续?

4

1 回答 1

2

因为你在服务器端写recvfrom,如果你注释这个,它不会阻塞,它会继续向客户端发送数据。然而,在实际情况下,通信的对等方应该交换信息。

于 2012-04-20T00:57:08.483 回答