【问题标题】:Winsock 2.0 Will Not Connect to Public IP AddressWinsock 2.0 将无法连接到公共 IP 地址
【发布时间】:2011-11-03 09:33:14
【问题描述】:

所以我正在尝试构建一个简单的文本 IM 程序来进入美妙的网络世界。我使用带有 C++ 的 Winsock 2.0 编写了 2 个程序:一个服务器和一个客户端。我已经通过创建套接字指定了一个 UDP 连接:

SOCKET Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

当我尝试使用本地 IP 地址连接到服务器时,一切正常。但是,当我使用我的互联网 IP 地址时,它不会连接。我相当肯定这不是防火墙问题,因为我在禁用防火墙和防病毒软件的情况下进行了多次测试。有什么我想念的吗?你能想到它可以通过本地地址而不是公共 IP 地址连接的任何其他原因吗?非常感谢!

【问题讨论】:

  • 您的路由器和所有路由器上的端口转发正确完成,直到您到达公共域?
  • 嗯……大概就是这样。我没有对端口转发做任何事情。我通过代码中的端口 17000 运行所有内容。我以前从未这样做过;转发端口是什么意思,我该怎么做?谢谢!
  • 端口转发重定向端口流量,访问Steve-o发布的链接

标签: c++ network-programming udp ip-address winsock2


【解决方案1】:

您拥有的公共 IP 地址很可能归您的网络路由器设备所有。它需要配置为将流量传递到您的计算机上

  public IP            internal router
   address +--------+  IP address  +---------+
      v    |        |  v           |         |
 ----------+ router +--------------+ desktop +
           |        |           ^  |         |
           +--------+   internal   +---------+
                      desktop IP address

http://portforward.com/

【讨论】:

  • 您的意思是我的路由器需要配置为将流量传送到我的计算机上?这是端口转发的作用吗?如果我转发端口 17000,这是否意味着我告诉我的路由器将任何进入端口 17000 的信息发送到我的计算机?
  • @Jeremy 没错,该链接提供了一些常见设备的文档。例如“123 端口的流量必须发送到 123 端口上的内部 IP 192.168.1.3”。
  • 那么为什么通常不需要端口转发,但在这种情况下却需要呢?和我硬编码端口 17000 有关系吗?
  • @Jeremy 因为 NAT 后面的家庭用户通常不托管服务器,他们通常只是客户端最终用户。阅读UPnP(或NAT-PMP for OSX)了解解决此问题的方法。
  • 我确定我已经成功将17000端口转发到我的电脑,但是我的客户端仍然无法通过公共IP地址连接到服务器。你能想到我错过的其他任何事情吗?感谢您的帮助!
猜你喜欢
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多