You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Socket+Ngrok建立TCP隧道时遇getaddrinfo失败错误求助

解决socket连接ngrok TCP隧道的getaddrinfo错误

我用socket模块写了简单的服务端代码,通过ngrok将本地监听的5002端口转发为TCP隧道,生成的转发地址为tcp://0.tcp.in.ngrok.io:18376。但客户端代码使用该地址连接时触发错误:socket.gaierror: [Errno 11001] getaddrinfo failed,修改客户端host参数(去掉端口)也没解决问题,求指导正确连接方式。

问题根源

你的客户端代码存在两个关键错误:

  1. host参数格式错误:socket.connect()要求传入的主机地址不能带tcp://协议前缀,否则DNS解析会直接失败。
  2. 端口参数错误:你传入了本地服务端的端口5002,但客户端应该连接ngrok隧道分配的端口18376,而非本地端口。

修正后的客户端代码

import socket

# 提取ngrok隧道的主机地址(去掉tcp://前缀)和对应端口
host = "0.tcp.in.ngrok.io"
port = 18376  # 使用ngrok生成的端口,不是本地的5002

client = socket.socket()
client.connect((host, port))
mess = input("Enter message::")
while mess != 'q':
    client.send(mess.encode())
    data = client.recv(1024).decode()
    print("FROM SERVER = ", data)
    mess = input("Enter message ::")
client.close()

额外注意事项

  • 服务端可将host改为"0.0.0.0",这样能接受来自任意网卡的连接,避免仅绑定localhost可能带来的限制(当前ngrok转发到localhost:5002,原代码也能工作,但修改后兼容性更强)。
  • 确保ngrok进程处于运行状态,隧道未断开或过期。
  • 客户端所在网络需能正常访问ngrok服务器,避免防火墙拦截。

内容的提问来源于stack exchange,提问作者user20336969

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:50:24