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

如何用Python实现不同网络下两台设备的屏幕共享?

跨网络屏幕共享实现方案

你现在的代码只能在同网环境下运行,核心问题是接收端绑定了127.0.0.1——这个地址仅监听本地回环接口,外部网络无法访问到服务。下面给你几个可行的解决思路:

方案一:端口映射(最直接的方法)

适合能操作路由器的场景,比如家庭宽带环境。

步骤:

  1. 修改接收端绑定地址:把receiver.py里的127.0.0.1换成0.0.0.0,让服务器监听所有可用网络接口:
from vidstream import StreamingServer
import threading

# 绑定到所有网络接口
receiver = StreamingServer('0.0.0.0', 9999)
t = threading.Thread(target=receiver.start_server)
t.start()

while input("") != 'STOP':
    continue
receiver.stop_server()
  1. 获取接收端公网IP:在接收端机器上用命令行执行curl ifconfig.me,或通过浏览器查询公网IP,比如113.xx.xx.xx。
  2. 路由器设置端口转发:登录路由器管理后台(通常是192.168.1.1或192.168.0.1),找到「端口转发」/「虚拟服务器」选项,添加规则:
    • 外部端口:9999(与脚本端口一致)
    • 内部IP:接收端的局域网IP(用ipconfig/ifconfig查询,比如192.168.1.105)
    • 内部端口:9999
    • 协议选择TCP
  3. 修正客户端代码并修改连接地址:把client.py里的127.0.0.1换成接收端的公网IP,同时修正原代码里的笔误(最后一行应该调用sender的停止方法):
from vidstream import ScreenShareClient
import threading

# 替换成接收端的公网IP
sender = ScreenShareClient('113.xx.xx.xx', 9999)
t = threading.Thread(target=sender.start_stream)
t.start()

while input("") != 'STOP':
    continue
sender.stop_stream()  # 修正原代码的笔误

补充说明:

  • 如果你的公网IP是动态的(大部分家庭宽带都是),可以使用动态域名解析(DDNS)服务,将域名绑定到动态IP,避免每次更换IP的麻烦。
  • 记得给接收端机器的防火墙开放9999端口的入站权限:Windows在防火墙中添加规则,Linux执行ufw allow 9999/tcp。

方案二:内网穿透工具(无需操作路由器)

如果没有路由器操作权限,或嫌端口映射麻烦,可以使用现成的内网穿透工具,比如ngrok、frp等。

用ngrok的示例:

  1. 下载ngrok并注册账号,获取authtoken后完成配置。
  2. 在接收端机器上运行命令,将本地9999端口映射到公网:
ngrok tcp 9999

运行后会输出一个公网地址,比如tcp://0.tcp.ngrok.io:12345。
3. 修改client.py的连接地址:IP填写0.tcp.ngrok.io,端口填写12345,接收端仍需绑定0.0.0.0。

方案三:P2P方式(无需公网IP)

不想依赖公网IP或第三方工具的话,可以使用P2P库(比如基于WebRTC的aiortc),让两台机器直接建立连接。不过这个方案需要自行实现更多逻辑,比vidstream的封装更复杂,适合有一定开发基础的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:20:35