没有路由问题的 C# 远程桌面

C# Remote Desktop Without Routing Issues

在最近使用一款流行的软件远程访问我的工作计算机后(我拥有公司 - 这都是合法的......),我开始对在我自己的 C# 程序中实现类似的远程桌面功能感兴趣,目前用于业余爱好,但如果成功的话可以在工作中使用。

我正在使用 TcpClient 和 TcpListener 并创建了一个用于侦听和接受连接的服务器。本质上,我有一个客户端-服务器聊天系统在工作。客户端最初都登录到服务器并使用加密的 TCP 通信。

对于文件传输和屏幕截图,我非常希望客户端直接通信(否则文件必须发送客户端 --> 服务器 --> 客户端)。我只是想知道是否有一种方法可以让商业软件在无需最终用户设置路由器和防火墙规则的情况下实现这一点?

一旦两个客户端都"dialled out"到服务器,是否有一种方法可以在不先将所有内容发送到服务器的情况下获得直接客户端(点对点)通信?

我有光纤宽带,所以没有带宽问题。我的所有文件都进行两次旅行似乎有点浪费(特别是如果服务器是远程的,但两个客户端都在局域网上)。

您要搜索的字词可能是 "hole punching"。

Hole punching is a technique in computer networking for establishing a direct connection between two parties in which one or both are behind firewalls or behind routers that use network address translation (NAT). - https://en.wikipedia.org/wiki/Hole_punching_(networking)