连接到 ngrok 服务器的 python 套接字

Posted

技术标签:

【中文标题】连接到 ngrok 服务器的 python 套接字【英文标题】:python socket connecting to ngrok server 【发布时间】:2021-02-11 12:32:51 【问题描述】:

所以我对 python 服务器有点陌生,我制作了一个简单的程序来向服务器发送消息。当我将主机设置为192.168.x.x 时它可以工作,但我尝试使用 ngrok,这样如果我在另一个网络上,我就可以访问服务器。但是我似乎无法弄清楚如何让它工作。这也可能不是最好的方法,所以如果有人能提出更好的方法,那就太好了,但现在我有:

托管在 192.168.x.x:8080 上的服务器

转发到我的ip的ngrok隧道

以及将数据发送到该 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

注意:当我使用我的计算机 IP 而不是使用 ngrok 时,这有效,所以我知道它不是主机问题

没有错误,但服务器似乎没有响应

谢谢!

【问题讨论】:

【参考方案1】:

我不熟悉 ngrok,但是在本地托管您的代码我发现将服务器中的 HOST 更改为:

HOST, PORT = "0.0.0.0", 8080

...或者实际的本地 ip 给了我预期的响应。

【讨论】:

我改变了这个,但仍然没有来自服务器的响应(我认为修复了 2 个问题中的 1 个)我已经编辑了帖子【参考方案2】:

套接字在 tcp 协议上工作,但您尝试使用 http。我通过 LogMeIn Hamachi 解决了这个问题。它与套接字完美配合。您也可以使用 ngrok,但您需要升级到 Pro 或 Business plan 才能使用 tcp。

如果需要,您可以在此处阅读有关 pyngrok 的信息:https://pyngrok.readthedocs.io/en/latest/integrations.html#python-tcp-server-and-client

【讨论】:

以上是关于连接到 ngrok 服务器的 python 套接字的主要内容,如果未能解决你的问题,请参考以下文章

ngrok 未连接到本地服务器

如何通过 ssh 连接到 ngrok 自托管服务器

Python套接字通过端口转发连接到服务器

android中的python套接字无法连接到在virtualbox中运行的python服务器

使用 ngrok 创建隧道以连接到 MongoDB 本地数据库

wbhook 通过 ngrok 连接到本地 node.js 服务器,服务触发 Webhooks 需要密码吗?