我是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
答案 0 :(得分:1)
从prompt.ask
获得的值,它们不包括换行符。在将数据打印到套接字时,您不会添加一个。因此gets
等待永远不会到达的行尾标记(因此“冻结”)。
解决方案:使用socket.puts
代替socket.print
(做同样的事情,但在末尾添加换行符)。