我使用msdn中的示例在C中用winsock2编写了一个简单的char程序。除非我试图通过未连接到同一路由器的计算机连接到服务器,否则(使用外部地址)网络)
我可以确定它不是计算机或路由器上的防火墙问题,我设置一个Minecraft服务器并在外部连接它没有问题。
我试图将外部IP地址绑定到服务器,但事实证明这是不可能的。
是否有一些标志允许从外部IP连接?
答案 0 :(得分:0)
服务器套接字只能绑定到属于其运行的计算机的IP。绑定到INADDR_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。路由器负责调整数据包标头,以便各方认为他们正在相互通信,而不知道路由器在中间。