2014-10-19 2 views
0

Недавно я начал изучать Ruby Sockets и решил исследовать тему. Я наткнулся рубинового-документ, который имел некоторый пример кода, который протекал гладко:Как подключить другой компьютер к моему локальному серверу?

Это пример кода для сервера:

require 'socket' 

server = TCPServer.new 2000 # Server bound to port 2000 

loop do 
    client = server.accept # Wait for a client to connect 
    client.puts "Hello !" 
    client.puts "Time is #{Time.now}" 
    client.close 
end 

И пример кода для клиента: требуется «гнездо»

s = TCPSocket.new 'localhost', 2000 

while line = s.gets # Read lines from socket 
    puts line   # and print them 
end 

s.close    # close socket when done 

Так что это сработало хорошо, но мне было интересно, как я хочу, чтобы клиент подключился, если он работает с другого компьютера. Поэтому я попытался заменить «localhost» в коде клиента моим общедоступным IP-адресом, любезно предоставленным whatismyip.com, однако, когда я попытался запустить новый клиентский код на другом компьютере, я просто получил ошибку тайм-аута. Я даже попытался запустить новый клиентский код на том же компьютере, на котором работает сервер, но все-таки я получил ошибку тайм-аута. Кто-нибудь знает, как я могу заставить это работать правильно? Любая помощь будет высоко оценена!

+2

Попробуйте использовать * внутренний * IP-адрес другого компьютера, а не адрес, который дает вам случайная внешняя служба. В зависимости от вашей ОС используйте команду 'ipconfig' или' ifconfig', чтобы узнать, что это такое. Вероятно, вы за NAT или что-то там, где внешний IP-адрес недоступен для внутренних подключений. –

+0

@GregHewgill, спасибо, я думаю, это сработало. Однако кажется, что компьютер, на котором размещен сервер, блокирует клиента, так как я получаю ошибку «ECONNREFUSED». – lakam99

+0

Ну, это шаг в правильном направлении. Это может означать, что ваш сервер не запущен, или какое-либо локальное программное обеспечение брандмауэра на сервере блокирует входящее соединение. –

ответ

0

Greg Hewgill помог мне понять это: Моя первая проблема заключалась в том, что я использовал неправильный адрес. Грег предложил проверить мой фактический адрес с помощью команды cmd «ipconfig». Команда дала мне фактический адрес, на котором размещался сервер. Благодаря этому я изменил «localhost» в клиентском коде и изменил его на фактический IP-адрес. После запуска я получил сообщение об ошибке, в котором говорилось, что сервер активно отказался от соединения. Это было исправлено путем изменения «localhost» в коде сервера на IP-адрес машины сервера. Спасибо, Грег за помощь!

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