Ruby TCPServer не прослушивает порт на Google Cloud Platform - PullRequest
0 голосов
/ 01 мая 2019

Я получил школьное задание, в котором нас просят потренироваться в программировании сокетов, поэтому я планирую запустить свой бэкэнд на виртуальной машине, предоставленной Google Cloud Platform, и отправить на нее некоторое сообщение с моего локального компьютера. Но когда я запускаю код на стороне клиента, он говорит, что соединение отказано. Позже проверил с netstat -a на облачной оболочке, и он говорит, что моя программа даже не слушает (пока она работает в фоновом режиме).

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

Мои правила брандмауэра Google Cloud Platform здесь

Код на стороне сервера:

require 'socket'

module WebsocketTest
  module_function

  def init
    @server = TCPServer.new('0.0.0.0', 8080)
    @running = false
  end

  def run
    STDERR.puts 'Server is running'
    @running = true

    while @running
      socket = @server.accept
      STDERR.puts 'Incoming Request'
      http_request = ''
      while (line = socket.gets) && (line != "\r\n")
        http_request += line
      end
      STDERR.puts http_request
      socket.close
    end
  end
end

WebsocketTest.init
WebsocketTest.run 

Код на стороне клиента:

require 'socket'

s = TCPSocket.new('External IP of the VM', 8080)
s.send('Hello World!', 0)
s.close

Сообщение об ошибке:

client.rb:3:in `initialize': No connection could be made because the target machine actively refused it. - connect(2) for "xxx.xxx.xxx.xxx" port 8080 (Errno::ECONNREFUSED)

1 Ответ

0 голосов
/ 01 мая 2019

ОК. Я понял, это может звучать глупо ... Я использовал Active Cloud Shell внутри веб-страницы GCP и подключился к своему проекту, который, похоже, является временной средой.Позже я подключаюсь к экземпляру через SSH на панели «Экземпляр виртуальной машины», запускаю код в OP и все идет хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...