Я получил школьное задание, в котором нас просят потренироваться в программировании сокетов, поэтому я планирую запустить свой бэкэнд на виртуальной машине, предоставленной 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)