2010-09-30 2 views
2

Я хочу написать простой серверный сокет в Ruby, который, когда клиент подключается к нему, печатает сообщение и закрывает клиентское соединение. Я придумал:Простая программа сокетов в Ruby

require 'socket' 

server = TCPServer.open('localhost',8800) 

loop {    
    client = server.accept 
    Thread.start do 
     s = client 
     s.puts "Closing the connection. Bye!" 
     s.close 
    end   
} 

Однако, когда я получить доступ к «LOCALHOST: 8800» в браузере, я не получаю это сообщение, вместо этого, он говорит, страница не найдена .. Что я здесь делаю неправильно?

+0

Это старый поток, но интересно - если вы заметили, что когда вы повторно обновляете браузер, он показывает «Закрытие соединения. Bye! 'Сообщение? – TheMouseMan

ответ

4

Весьма вероятно, что ваш браузер ожидает что-то на удаленном конце, что говорит Http.

Это зависит от вашего браузера, а также от точного URI, который вы ввели. Также возможно, что ваш браузер подключает соединение, а затем отображает страницу с ошибкой.

Если вы хотите, чтобы сервер работал, используйте telnet из командной строки. Итак, в одном окне типа ruby ./myfilename.rb, а затем в другом виде telnet localhost 8800

+0

Исправить. Первое, что браузер сделает после открытия соединения, - это сделать запрос GET для документа, указанного в URL-адресе, который скорее всего был подразумеваемым «/index.html». Поскольку сервер не отправил его и не отправил правильные ответы, браузер отказался. Браузеры знают об HTTP, который представляет собой определенную серию команд. Сырое сокетное соединение находится на другом конце спектра IP и может быть любым протоколом. Программист должен написать все промежуточные smarts в сервер сокета, чтобы все это работало. –

Смежные вопросы