我使用msdn中的示例在C中使用winsock2编写了一个简单的char程序。除非我尝试通过未连接到同一路由器的计算机连接到服务器,否则它可以工作(使用网络的外部地址)
我可以确定这不是计算机或路由器上的防火墙问题,我可以设置我的世界服务器并从外部连接到它。
我试图将外部 ip 地址绑定到服务器,但事实证明这是不可能的。
是否有某种标志允许从外部 IP 连接?
服务器套接字只能绑定到属于它运行的机器的 IP。绑定到INADDR_ANY
为您处理。
为了使网络外部的客户端连接到该服务器,客户端必须连接到路由器本身上的开放 IP/端口,而不是服务器计算机。必须将路由器配置为将其公共 IP/端口上的入站连接转发到服务器的 IP/端口。
例如,假设您有一个服务器套接字在一台机器的端口 12345 上侦听,该机器的本地 LAN IP 为 192.168.0.1,而路由器的公共 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。路由器负责调整数据包标头,以便各方认为他们正在相互通信并且不知道路由器在中间。