【问题标题】:Why can't I connect to my server using my public IP?为什么我无法使用我的公共 IP 连接到我的服务器?
【发布时间】:2016-12-25 14:35:16
【问题描述】:

我有一个服务器程序和一个客户端程序。在开发程序时,为了方便起见,我在同一台机器上运行服务器和客户端。服务器开始使用这些行监听传入的连接:

var listener = new TcpListener(IPAddress.Any, 7070);
listener.Start();

客户端使用这些行(简化)连接到服务器:

var client = new TcpClient(AddressFamily.InterNetwork);
client.Connect(IPAddress.Loopback, 7070);

我使用IPAddress.Loopback,因为我在同一台机器上运行程序。但是,知道以后服务器和客户端不一定要在同一台机器上运行,我把它从http://icanhazip.comIPAddress.Parse(...))改成了我的公网IP。因此客户端无法连接到同一台机器上的服务器,No connection could be made because the target machine actively refused it <my public ip:7070> 除外。

我尝试禁用我的防火墙,但它仍然无法正常工作。为什么服务器拒绝连接?我不是特别告诉它用IPAddress.Any 监听所有接口吗?

为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 所以你是说你已经尝试过client.Connect(<your public IP>, 7070) 并且那是你得到异常的时候?这是我所期望的,除非您在端口 7070 上从路由器到计算机的端口转发。
  • @adv12 所以你告诉我是我的路由器拒绝连接?
  • 您能否连接到您的公共 IP 取决于您的路由器/面向互联网的设备,至少您需要一个端口转发规则,而且通常 NAT 仍然会阻止它工作。
  • 我会按照我的理解解释它,但请注意,我不是专家:您的公共 IP 由您的 ISP 提供,实际上是您的路由器的地址。路由器为本地网络中计算机的传出连接执行网络地址转换 (NAT)。这些请求在互联网上看起来就像它们都来自一个 IP,并且您的路由器根据地址转换表将响应发送到正确的本地计算机。这适用于传出流量,但不适用于传入流量。 (在下一条评论中继续...)
  • 如果有东西试图打开 TCP 连接 从 Internet 到您的路由器,除非您专门配置,否则路由器不知道它可能尝试连接的本地计算机将该流量转发到本地网络上的特定计算机。这就是端口转发的用武之地。如果您还没有配置端口转发,路由器只会说:“对不起,我不处理端口 7070 上的传入请求。”

标签: c# tcp server client tcplistener


【解决方案1】:

这是我的 cmets 对该问题的回答,希望是正确的:

您的公共 IP 由您的 ISP 提供,实际上是您路由器的地址。路由器为本地网络中计算机的传出连接执行网络地址转换 (NAT)。这些请求在互联网上看起来就像它们都来自一个 IP,并且您的路由器根据地址转换表将响应发送到正确的本地计算机。这适用于传出连接,但不适用于传入连接。

如果有东西试图打开从 Internet 到您的路由器的 TCP 连接,路由器不知道它可能试图连接到哪台本地计算机,除非您专门配置它以将该流量转发到本地网络上的特定计算机.这就是端口转发的用武之地。如果您尚未配置端口转发,路由器只会说:“对不起,我不处理端口 7070 上的传入请求。”

【讨论】:

    【解决方案2】:

    你的开发机器在路由器后面吗?

    通过您的公共 IP 地址发送给您的网络流量通过特定的网络协议在给定端口上到达您的路由器。您的路由器需要知道在您的网络内部将这些流量发送到哪里。流量从 Internet 流向您的计算机,而您的路由器不能或不会将流量转发到您计算机的计算机。

    由于网络地址转换 (NAT) 和通用即插即用 (UPnP) 的强大功能,您在日常生活中不会注意到这一点。在这里忽略一些细节,网络地址转换允许修改流量标头以将流量从您的公共 IP 路由到网络上的实际机器 IP。当传入流量尝试打开网络上的连接端口时,需要配置路由器以适当地转发该流量。通用即插即用是许多现代路由器支持的协议,允许软件和设备无缝路由流量,而无需转发端口。

    这让您有两个选择:

    1. 出于开发目的,请访问您的路由器并将所需端口转发到您的开发机器

    2. 1234563用户,在这种情况下仍然需要端口转发。

    【讨论】:

      猜你喜欢
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 2011-10-11
      • 2018-10-27
      • 2021-05-11
      • 2021-09-18
      • 2014-04-28
      相关资源
      最近更新 更多