Простой сервер, созданный в Ruby (TCPServer), как получить доступ с другого IP? - PullRequest
0 голосов
/ 28 мая 2018
require 'socket'  # Provides TCPServer and TCPSocket classes

# Initialize a TCPServer object that will listen
# on localhost:2345 for incoming connections
server = TCPServer.new(2345)


loop do 
  # Wait until a client connects, then return a TCPSocket
  # that can be used in a similar fashion to other Ruby
  # I/O objects. (In fact, TCPSocket is a subclass of IO.)
  socket = server.accept

  socket.puts "What do you say?"

  they_said = socket.gets.chomp

  until they_said == "quit"
    socket.puts "You said: #{they_said}!"
    they_said = socket.gets.chomp
  end

  socket.puts "You said: #{they_said}. Goodbye!"

  # Close the socket, terminating the connection
  socket.close

  end

В приведенном выше коде я создал простой сервер на ruby ​​(тема, с которой я только что познакомился).В рамках этого упражнения у меня есть следующая инструкция:

«Подключитесь к ноутбуку вашей пары с вашего ноутбука. Для этого вам понадобится сетевой IP-адрес ноутбука с сервером на нем»

Мы использовали telnet, но похоже, что мы не можем использовать это с нашими Mac, потому что это не разрешено в High Siera (по крайней мере, без дальнейшей настройки).

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

1 Ответ

0 голосов
/ 28 мая 2018

Если ваша ОС не принимает соединения, то на уровне Ruby вы ничего не можете с этим поделать.Вам нужно будет отключить брандмауэр или добавить исключение для этого порта.

Вот три шага, которые вам нужно сделать:

Убедитесь, что вы привязали TCPServer к"публичный" IP

Обновление: как @ siegy22 указал в комментариях: вы также можете использовать "0.0.0.0".

Вы можете найти его в настройках сети или черезipconfig

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether ca:fe:ca:fe:ca:fe
    inet y.y.y.y netmask 0xffffff00 broadcast x.x.x.x
    media: autoselect
    status: active

Здесь y.y.y.y - это интересующий вас IP-адрес. Создайте TCTServer следующим образом:

TCPServer.new("y.y.y.y", 2345)

Остановите брандмауэр вашего Mac (илиразрешить конкретное подключение к этому порту)

Это можно сделать в разделе «Предпочтения / Securiry».

Снова включите его после тестирования

Подключитесь к серверу с другого компьютера

telnet y.y.y.y 2345

Вышеуказанные шагиПредположим, что оба компьютера находятся в одной сети, нет соединения через интернет.Если вы находитесь в другой сети (например, бот подключен к Интернету), мне приходят на ум два решения

  1. Tunnel: используйте сервис, такой как ngrok (https://ngrok.com/), для созданиятуннель к вашему серверу с публичным адресом. Следуйте инструкциям, и вы получите публичный адрес, который ваш партнер может использовать для подключения.
  2. вы можете посмотреть свой публичный IP через службу (что-то вроде https://www.whatismyip.com/what-is-my-public-ip-address/), а затем используйте этот IP-адрес для подключения. Это может не работать без дальнейших изменений в вашей сети, поскольку маршрутизатор / модем может / должен блокировать входящие подключения, и вам потребуется какая-то переадресация на ваш компьютер.

Предлагаю сначала попробовать ngrok (или что-то подобное).

...