C++ Winsock 2.0将不会连接到公共IP地址

C++ Winsock 2.0将不会连接到公共IP地址,c++,network-programming,udp,ip-address,winsock2,C++,Network Programming,Udp,Ip Address,Winsock2,因此,我正试图建立一个简单的文本即时通讯程序,进入精彩的网络世界。我已经用Winsock 2.0和C++编写了两个程序:一个服务器和一个客户端。我已通过套接字创建指定了UDP连接: SOCKET Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); 当我尝试使用本地IP地址连接到服务器时,一切正常。但是,当我使用internet IP地址时,它将无法连接。我相当肯定这不是防火墙问题,因为我在禁用防火墙和防病毒的情况下进行了多次测试。我有什么遗漏吗

因此,我正试图建立一个简单的文本即时通讯程序,进入精彩的网络世界。我已经用Winsock 2.0和C++编写了两个程序:一个服务器和一个客户端。我已通过套接字创建指定了UDP连接:

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

当我尝试使用本地IP地址连接到服务器时,一切正常。但是,当我使用internet IP地址时,它将无法连接。我相当肯定这不是防火墙问题,因为我在禁用防火墙和防病毒的情况下进行了多次测试。我有什么遗漏吗?你能想到它能通过本地地址而不是公共IP地址连接的其他原因吗?多谢各位

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

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

在您到达公共域之前,您的路由器和所有路由器上的端口转发都已正确完成?嗯……可能就是这样。我没有做任何与港口转运。我正在通过代码中的端口17000运行所有操作。我以前从未这样做过;转发端口意味着什么,我该如何做?谢谢端口转发重定向端口流量,访问Steve-o发布的链接你是说我的路由器需要配置为将流量传递到我的计算机上?端口转发就是这样做的吗?如果我转发端口17000,这是否意味着我在告诉我的路由器向我的计算机发送端口17000的任何信息?@Jeremy没错,该链接提供了一些常见设备的文档。例如,“端口123上的流量必须发送到端口123上的内部IP 192.168.1.3”。那么,为什么通常不需要端口转发,但在这种情况下是这样?这与我硬编码端口17000有关吗?@Jeremy因为NAT背后的家庭用户通常不托管服务器,他们通常只是客户端最终用户。请阅读(或针对OSX)了解解决此问题的方法。我确信我已成功地将端口17000转发到我的计算机,但是,我的客户端仍不会通过公共IP地址连接到服务器。你能想到我还错过了什么吗?谢谢你的帮助!