【问题标题】:C# TcpListener external IPC# TcpListener 外部 IP
【发布时间】:2012-11-02 07:02:14
【问题描述】:

我正在创建一个 TcpListener,我希望其他计算机的客户端能够加入我的侦听器。

我已经阅读并理解我必须进行端口转发,但这对我来说没有任何意义 - 当我发布我的应用程序时,我希望其他人创建这个监听器,我不能告诉他们做端口转发。

是否有可能创建一个客户端无需端口转发就可以加入的 TcpListener? 谢谢你。

【问题讨论】:

  • 你在哪里读到你必须做端口转发?
  • 欢迎来到stackoverflow。如果你说得更清楚一点,这个问题可能会得到更好的答案,我不确定你在问什么。

标签: c# sockets tcp tcpclient tcplistener


【解决方案1】:

好吧,让我们先尝试清除一些东西。

使用端口转发的主要原因是因为您在内部网络前面有一个 NAT 路由器。设置端口转发是指示 NAT 路由器将流量转发到公共接口上的某个端口到内部计算机上的端口。

如果您没有 NAT 路由器,则不需要端口转发。

今天的许多路由器都支持UPnP,这是一种请求路由器创建特定端口转发的技术。一个合适的库可能是ManagedUPnP

但是,您仍然需要弄清楚路由器的公共 IP 以及您打开的端口,并将其与您的其他应用程序通信。

如果您的路由器不允许 UPnP 或存在其他防火墙规则,则您无法正确设置端口转发。

【讨论】:

    【解决方案2】:

    您可以在您的电脑上创建服务器应用程序和转发端口。客户端应用程序(您将发布的这个)将连接到您的电脑,以便它们可以在 NAT 上。您还可以将您的应用程序与一些 php/asp 页面结合起来,但这取决于您要发送的数据。如果是某种 PC 统计信息,如正常运行时间、硬件等。您只需在客户端应用程序中使用 http 查询到您创建的网站脚本(例如 mypage.com/?uptime=100&ram=2gb&hash=xxxx 等)

    【讨论】:

      【解决方案3】:

      只有服务器(接受 TCP 请求的计算机)需要转发端口。

      常见的模型是您(服务的开发者/生产者)托管服务器。然后客户(订阅您的服务的人)使用 IP 或 URL 连接到您的服务。如果您的服务位于防火墙后面(您的计算机和 Internet 调制解调器之间有一个路由器),那么您必须转发端口。您可能还必须在 Window 的防火墙中打开端口,但我希望您已经这样做了。在这个模型中,客户不需要对他们的路由器做任何事情(就像使用网络浏览器一样)。

      如果您要在客户托管服务的地方制造产品,那么他们将不得不处理端口问题。在这种情况下,您可以尝试像 Albin Sunnanbo 建议的那样尝试 ManagedUPnP,或者将他们重定向到解释如何设置端口转发的众多站点之一。

      【讨论】:

        猜你喜欢
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 2020-08-03
        • 2015-06-09
        • 2012-05-13
        • 2016-03-17
        • 2011-10-06
        相关资源
        最近更新 更多