Как отображать символы, полученные через сокет?

У меня есть очень простая программа Ruby, которая действует как «эхо-сервер». Когда вы подключаетесь к нему через telnet, любой текст, который вы набираете, возвращается обратно. Эта часть работает. Если я добавлю оператор «putc», чтобы также печатать каждый полученный символ на консоли, на которой запущена программа, печатается только самый первый отображаемый символ. После этого он продолжает возвращать сообщения клиенту telnet, но на консоли ничего не печатается.

Ниже приведена небольшая урезанная программа, которая демонстрирует проблему.

Я очень новичок в Ruby и, вероятно, совершил типичную ошибку новичка. Что я сделал не так?

require 'socket'  

puts "Simple Echo Server V1.0"  
server = TCPServer.new('127.0.0.1', '2150')  
cbuf = ""  

while socket = server.accept  
    cbuf = socket.readchar  
    socket.putc cbuf  
    putc cbuf  
end  

person Timm    schedule 29.09.2010    source источник


Ответы (1)


Проблема в том, что ваш код запускает цикл while только один раз при каждом подключении (TCPServer#accept принимает соединение). Попробуйте что-то более похожее на:

require 'socket'  

puts "Simple Echo Server V1.0"  
server = TCPServer.new('127.0.0.1', '2150')

socket = server.accept  

while line = socket.readline
  socket.puts line
  puts line
end
person joeldt    schedule 30.09.2010
comment
Спасибо. Знал, что это будет что-то очевидное, что я упустил из виду. - person Timm; 30.09.2010