Недавно я начал изучать 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, однако, когда я попытался запустить новый клиентский код на другом компьютере, я просто получил ошибку тайм-аута. Я даже попытался запустить новый клиентский код на том же компьютере, на котором работает сервер, но все-таки я получил ошибку тайм-аута. Кто-нибудь знает, как я могу заставить это работать правильно? Любая помощь будет высоко оценена!
Попробуйте использовать * внутренний * IP-адрес другого компьютера, а не адрес, который дает вам случайная внешняя служба. В зависимости от вашей ОС используйте команду 'ipconfig' или' ifconfig', чтобы узнать, что это такое. Вероятно, вы за NAT или что-то там, где внешний IP-адрес недоступен для внутренних подключений. –
@GregHewgill, спасибо, я думаю, это сработало. Однако кажется, что компьютер, на котором размещен сервер, блокирует клиента, так как я получаю ошибку «ECONNREFUSED». – lakam99
Ну, это шаг в правильном направлении. Это может означать, что ваш сервер не запущен, или какое-либо локальное программное обеспечение брандмауэра на сервере блокирует входящее соединение. –