подключение сокета python к серверу ngrok

#python #sockets #ngrok #socketserver #python-sockets

#python #сокеты #ngrok #socketserver #python-сокеты

Вопрос:

Итак, я немного новичок в серверах python, и я создал простую программу, которая отправляет сообщение на сервер. Это работает, когда я устанавливаю хост как 192.168.x.x , но я попытался использовать ngrok, чтобы таким образом я мог получить доступ к серверу, если я нахожусь в другой сети. Однако я не могу понять, как заставить его работать. Это также, вероятно, не лучший способ сделать это, поэтому, если кто-нибудь может предложить лучший способ, это было бы здорово, но сейчас у меня есть:

Сервер, размещенный на 192.168.x.x: 8080

Туннель ngrok, который перенаправляет на мой ip

и клиентская программа, которая отправляет данные на этот адрес ngrok

Вот код хоста:

 import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        print("{} wrote:".format(self.client_address[0]))
        print(self.data)
if __name__ == "__main__":
    HOST, PORT = "192.169.x.x", 8080
    server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()
  

И вот клиент:

 import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
    ip = socket.gethostbyname('http://urlgoeshere.ngrok.io')
    print(ip)
    sock.connect((ip, 8080))
    sock.sendall(bytes("hello"   "n", "utf-8"))

  

Ngrok является:

Forwarding http://urlhere.ngrok.io -> http://192.168.x.x

Примечание: это сработало, когда вместо использования ngrok я использовал IP-адрес своего компьютера, поэтому я знаю, что это не проблема с хостом

Ошибок нет, но сервер, похоже, не отвечает

Спасибо!

Ответ №1:

Я не знаком с ngrok, но, размещая ваш код локально, я обнаружил, что ХОСТ на сервере меняется на:

HOST, PORT = "0.0.0.0", 8080

… или фактический локальный IP-адрес дал мне ожидаемый ответ.

Комментарии:

1. Я изменил это, но по-прежнему нет ответа от сервера (я думаю, исправлена 1 из 2 проблем) я отредактировал сообщение

Ответ №2:

Сокеты работают по протоколу tcp, но вы пытаетесь использовать http. Я решил эту проблему с помощью LogMeIn Hamachi. Он отлично работает с сокетами. Вы также можете использовать ngrok, но для использования tcp вам необходимо перейти на Pro или Business plan.

Вы можете прочитать о pyngrok здесь, если вам это нужно: https://pyngrok.readthedocs.io/en/latest/integrations.html#python-tcp-server-and-client