我正在尝试使用Ngrok使用socket
模块连接两个python脚本。我尝试使用ngrok.exe和pyngrok进行此操作。尝试使用port
作为12345
或80
与客户端连接(其他所有超时)。
在客户端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")
我是import socket
s = socket.socket()
url = "copied from server or ngrok"
ip = socket.gethostbyname(url)
port = 12345
s.connect((ip, 12345))
的开发人员,看到您正在使用它。文档中实际上有一个TCP套接字/客户端集成示例,可以在pyngrok
中找到。
但是您走在正确的轨道上。简而言之,您没有指定协议,这意味着正在使用默认协议(here)。您需要告诉http
和pyngrok
您要设置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
,请不要进行设置)。