Рубиновый сокет продолжает ждать ответа - PullRequest
0 голосов
/ 16 мая 2019

Я новичок в программировании на 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 Ответ

1 голос
/ 16 мая 2019

Значения, которые вы получаете от prompt.ask, они не включают символ перевода строки.И вы не добавите один, когда вы печатаете данные в сокет.Таким образом, gets ожидает маркера конца строки, который никогда не прибывает (следовательно, «замораживается»).

Решение: используйте socket.puts вместо socket.print (делает то же самое, но добавляет символ новой строкив конце).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...