Как создать соединение с vm на Google Cloud

Создал себе vm на Google Cloud и хотел попробовать пообщаться с машиной со своей локальной, но не получается совсем это реализовать.

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.bind(("34.66.13.6", 5050))

sock.listen()

conn, addr = sock.accept()

print(conn)

data = conn.recv(1024)

print(data)

При запуске пишет "Can not assign requested address", хотя 34.66.13.6 указан как внешний IP для vm

Если поменять IP на внутренний, то соединения все равно нет. Ну, и код клиента:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect(("10.128.0.2", 5050)) # -> IP менял в зависимости от IP принимающего сокета

sock.send("World, it's me".encode('utf-8'))

data = sock.recv(1024)

print(data)

С сетями очень плохо, рад буду любой помощи


Ответы (1 шт):

Автор решения: 5c0rp

Код сервера который нужно запустить на vm

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('', 5050))
sock.listen(1)
conn, addr = sock.accept()

print('connected:', addr)

while True:
    data = conn.recv(1024)
    if not data:
        break
    conn.send(data.upper())

conn.close()

Код клиента который вы запускаете локально

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('34.66.13.6', 5050))
sock.send(b'hello, world!')

data = sock.recv(1024)
sock.close()

print(data)

Далее если вы хотите использовать порт 5050 для подключения то нужно выполнить следующие шаги:

  1. В Google Cloud откройте VPC network и перейдите в Firewall
  2. По аналогии с default-allow-http настройте свое правило только с портом 5050
  3. Перейдите в редактирование своей vm и в пункте Network tags добавьте созданное вами правило с пункта 2
  4. Перезагрузите на всякий случай vm (stop/start)
→ Ссылка