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

Python Websockets IPv6跨网络通信失败求助(同WiFi正常,已开防火墙)

跨网络WebSocket通信故障排查与解决方案

问题描述

我希望让两台接入不同网络的PC通过互联网互发消息,已在服务器PC上为端口8765创建防火墙规则。当前代码在两台设备连接同一WiFi时可正常运行,但使用不同网络连接时无法工作。

服务器(PC #1)代码

import asyncio
import websockets

async def hello(websocket):
    name = await websocket.recv()
    print(f"<<< {name}")

    greeting = f"Hello {name}!"

    await websocket.send(greeting)
    print(f">>> {greeting}")

async def main():
    async with websockets.serve(hello, "", port=8765):
        await asyncio.Future()  # run forever

if __name__ == "__main__":
    asyncio.run(main())

客户端(PC #2)代码

import asyncio
import websockets
        
async def hello():
    uri = "ws://[2a02:8388:8bc7:4d00:1921:8126:966d:8d32]:8765"
    # 非真实IP

    async with websockets.connect(uri) as websocket:
        name = input("What's your name? ")

        await websocket.send(name)
        print(f">>> {name}")

        greeting = await websocket.recv()
        print(f"<<< {greeting}")

if __name__ == "__main__":
    asyncio.run(hello())

排查与解决步骤

  • 确认公网IP可用性:你使用的是IPv6地址,需先确认ISP分配的是全球可访问的IPv6单播地址(而非本地链路地址fe80::开头),部分ISP会通过NAT64转换IPv6流量,导致外部无法直接访问。若使用IPv4,家庭网络基本都是内网IP,必须配置端口映射。
  • 配置端口映射(IPv4场景):在服务器所在网络的路由器上,添加端口映射规则,将外部8765端口的请求转发到服务器的内网IP(如192.168.x.x)和8765端口。
  • 验证端口可达性:用外部设备通过telnet 公网IP 8765或端口检测工具测试,确认8765端口能被外部访问,排除防火墙或ISP拦截的可能。
  • IPv6网络配置检查:若使用IPv6,需确保路由器开启IPv6转发功能,同时服务器防火墙允许IPv6协议下8765端口的入站流量。
  • 动态DNS适配(可选):若公网IP是动态分配的,建议绑定动态DNS域名,避免IP变化导致连接失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:55:32