python - 连接到 ngrok 服务器的 python 套接字
问题描述
所以我对python服务器有点陌生,我做了一个简单的程序来向服务器发送消息。当我将主机设置为时它可以工作,192.168.x.x
但我尝试使用 ngrok,这样如果我在另一个网络上,我就可以访问服务器。但是我似乎无法弄清楚如何让它工作。这也可能不是最好的方法,所以如果有人能提出更好的方法,那就太好了,但现在我有:
托管在 192.168.xx: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 时,这有效,所以我知道它不是主机问题
没有错误,但服务器似乎没有响应
谢谢!
解决方案
我不熟悉 ngrok,但是在本地托管您的代码我发现将服务器中的 HOST 更改为:
HOST, PORT = "0.0.0.0", 8080
...或实际的本地 IP 给了我预期的响应。
推荐阅读
- javascript - 在任何情况下,我都可以在不使用 getElementByClassName 或 querySelectorAll 的情况下在边缘浏览器中获取所有具有相同 ID 的元素
- python - 熊猫数据框的子集
- angular - 单击按钮时刷新角度材料数据表数据源
- javascript - 如何将我的过滤器搜索输入文本与我的 RegEx 匹配?
- javascript - 谷歌饼图更改文本对齐方式
- java - Java:打印数组中数字的位置
- gradle - 使用最新的 gradle 警告:API 'variant.getMergeAssets()' 已过时并已替换为 'variant.getMergeAssetsProvider()'
- javascript - 解构 js 类以从外部构造函数访问
- excel - 自动填充活动工作表后在另一张工作表上自动填充不起作用(无错误)
- android - 如何在没有 Braintree 的情况下使用 PayPal 移动 SDK