【问题标题】:Connection to server while behind the rounter in WinSock2, C++在 WinSock2、C++ 中的路由器后面连接到服务器
【发布时间】:2014-05-04 00:54:44
【问题描述】:

我正在使用 WinSocks 用 C++ 编写一个非常简单的服务器-客户端应用程序。

当我将客户端的参数设置为:resolveHost ("google.pl") 用于服务器的 IP 和 80 用于端口时,我会收到一个 html(带有 GET 标头)。

当我首先运行服务器(使用端口 10000)然后运行客户端(端口 10000 IP inet_addr("127.0.0.1")似乎可以工作(我收到了一些东西)。

但是当我将客户端中的服务器 IP 更改为 inet_addr("188.246.158.171")(我的 IP 目前,我没有静态 IP,我已经通过某些网站检查了我的实际 IP),它肯定 有效。

我的电脑在路由器后面 - 可能是问题所在?

如果是这样,我可以通过不需要对路由器进行任何配置(端口转发等)的方式来解决它。另外,我不想制作任何特定于路由器的型号,所以我故意没有发布我的路由器型号;)

为什么我不想更改配置? 因为我的申请将适用于“简单的人”。简单的人不会尝试进行配置,我也不会要求他们这样做。 此外,许多应用程序(例如在线游戏)无需任何配置即可在我的路由器上正常工作 - 我的应用程序也不例外(以我计算机上的其他应用程序为例,我知道实现它是可能的并且很常见)。


我使用 Visual Studio 2012,适用于 Windows 7 x64。

【问题讨论】:

    标签: c++ routing winsock firewall winsock2


    【解决方案1】:

    如果您在路由器后面运行侦听服务器,如果您希望外部客户端通过路由器访问服务器,则必须在路由器上配置端口转发规则。你无法避免这一点。但是,如果路由器支持 uPnP(通用即插即用),您的服务器代码可以通过编程方式配置端口转发规则,例如使用 Microsoft 的IUPnPNAT 接口。否则,您必须使用路由器自己的配置软件(通常是路由器本身运行的 HTTP 接口)。

    如果已安装,您还必须在本地防火墙上配置端口/权限。一些防火墙为此提供了 API,例如 Microsoft's Firewall

    在线游戏和其他点对点应用程序采用多种 NAT 穿越 技术来绕过 NAT、防火墙等。打孔、角色反转等。进行一些搜索,信息随时可用.

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多