来自外部IP地址的Winsock2连接

来自外部IP地址的Winsock2连接,c,ip,winsock,winsock2,C,Ip,Winsock,Winsock2,我用C语言编写了一个简单的字符程序,使用了msdn中的示例。除非我试图通过未连接到同一路由器的计算机(使用网络的外部地址)连接到服务器,否则该程序是有效的 我可以肯定这不是计算机或路由器上的防火墙问题,我可以设置minecraft服务器并从外部连接到它 我曾尝试将外部ip地址绑定到服务器,但结果证明这是不可能的 是否有某种标志允许从外部IP进行连接?服务器套接字只能绑定到属于其运行的机器的IP。绑定到INADDR\u ANY可以为您处理这一问题 为了让网络外的客户端连接到该服务器,客户端必须连接

我用C语言编写了一个简单的字符程序,使用了msdn中的示例。除非我试图通过未连接到同一路由器的计算机(使用网络的外部地址)连接到服务器,否则该程序是有效的

我可以肯定这不是计算机或路由器上的防火墙问题,我可以设置minecraft服务器并从外部连接到它

我曾尝试将外部ip地址绑定到服务器,但结果证明这是不可能的


是否有某种标志允许从外部IP进行连接?

服务器套接字只能绑定到属于其运行的机器的IP。绑定到INADDR\u ANY可以为您处理这一问题

为了让网络外的客户端连接到该服务器,客户端必须连接到路由器本身的开放IP/端口,而不是服务器机器。路由器必须配置为将其公共IP/端口上的入站连接转发到服务器的IP/端口

例如,假设您有一个服务器套接字监听一台本地LAN IP为192.168.0.1的机器的端口12345,而路由器的公共IP为206.152.65.1。您可以将套接字绑定到192.168.0.1:12345,然后在路由器上打开端口12345(或您想要的任何可用端口),并定义端口转发规则以将该端口映射到192.168.0.1:12345。现在,外部客户端可以连接到206.152.65.1:12345,192.168.0.1:12345上的服务器将看到连接


更一般地说,定向到206.152.65.1:12345的任何网络数据包都将被调整并转发到192.168.0.1:12345。路由器负责调整分组报头,因此各方认为它们正在互相通信,而不知道路由器在中间。p> 绑定本地服务器套接字时,是否使用
INADDR\u ANY
?尝试绑定到外部地址时会遇到什么问题?是的,我正在使用INADDR_ANY绑定套接字,它可以正常工作。但是我无法将其与外部IP绑定,我收到错误10049。您无法从外部连接很可能是防火墙问题。你必须检查防火墙规则和日志。这似乎不太可能,我已尝试打开防病毒、防火墙,并将路由器设置为内部IP的DMZ。此外,我设置游戏服务器并连接到它(通过外部计算机)没有问题。您是否检查了错误10049指示的内容?如果没有,您可能希望在此处执行此操作: