Ruby套接字保持等待响应

时间:2019-05-16 19:22:17

标签: ruby sockets

我是Ruby编程的新手,我试图构建一个简单的回显服务器,但是在client.gets上它冻结了。我是套接字编程的新手。

server.rb

require "socket"
require "tty/prompt"

socket = TCPServer.open("0.0.0.0", 3000)
prompt = TTY::Prompt.new

loop do
    client = socket.accept
    client.print prompt.ask("server >")
    line = client.gets # freezes here
    puts line
end

socket.close

client.rb

require "socket"
require "tty/prompt"

socket = TCPSocket.open("192.168.1.6", 3000)
prompt = TTY::Prompt.new

loop do
    socket.print prompt.ask("client >")
    puts socket.gets # freezes here
end

server.close

1 个答案:

答案 0 :(得分:1)

prompt.ask获得的值,它们不包括换行符。在将数据打印到套接字时,您不会添加一个。因此gets等待永远不会到达的行尾标记(因此“冻结”)。

解决方案:使用socket.puts代替socket.print(做同样的事情,但在末尾添加换行符)。