[Python TCP套接字在使用Ngrok时返回getaddrinfo失败

问题描述 投票:0回答:1

我正在尝试使用Ngrok使用socket模块连接两个python脚本。我尝试使用ngrok.exe和pyngrok进行此操作。尝试使用port作为1234580与客户端连接(其他所有超时)。

在客户端s.connect((ip, port))上没有错误,但是Python server.py和ngrok终端没有注册任何东西。当我将URL放入Web浏览器中时,URL肯定会随着Ngrok注册502 bad gateway而起作用。

我认为这是因为套接字未使用HTTP而不是TCP,但是当我使用TCP标志(ngrok.exe TCP 12345)启动Ngrok时,转发地址看起来像tcp://0.tcp.ngrok.io:xxxxx,当我将其放入客户端[C0 ]它返回socket.connect()

所以我想我的问题是,如何获取Python客户端套接字以接受该地址,或者我应该做些不同的事情?

谢谢

server.py

socket.gaierror: [Errno 11001] getaddrinfo failed

client.py

from pyngrok import ngrok
import socket

port = 12345

s = socket.socket()
s.bind(('', port))

public_url = ngrok.connect(port)
print("ngrok tunnel \"{}\" -> \"http://127.0.0.1:{}/\"".format(public_url, port))

s.listen(5)      
print("socket is listening" )

c, addr = s.accept()

print('Got connection from', addr )

c.send(str.encode(str("Yes")))

while True:
    c.recv(1024).decode("utf-8")
python sockets ngrok pyngrok
1个回答
1
投票

我是import socket s = socket.socket() url = "copied from server or ngrok" ip = socket.gethostbyname(url) port = 12345 s.connect((ip, 12345)) 的开发人员,看到您正在使用它。文档中实际上有一个TCP套接字/客户端集成示例,可以在pyngrok中找到。

但是您走在正确的轨道上。简而言之,您没有指定协议,这意味着正在使用默认协议(here)。您需要告诉httppyngrok您要设置ngrok隧道。因此改为:

tcp

对于public_url = ngrok.connect(port, "tcp", options={"remote_addr": "{}:{}".format(host, port)}) print("ngrok tunnel \"{}\" -> \"tcp://127.0.0.1:{}/\"".format(public_url, port)) host,您需要首先设置一个port子域(可以执行ngrok),类似于here。然后,您也将同一主机/帖子也传递到host="1.tcp.ngrok.io"(您做错了什么,其中包括协议client.py,请不要进行设置)。

© www.soinside.com 2019 - 2024. All rights reserved.