来自外部IP地址的Winsock2连接

时间:2012-06-18 10:45:55

标签: c ip winsock winsock2

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

我可以确定它不是计算机或路由器上的防火墙问题,我设置一个Minecraft服务器并在外部连接它没有问题。

我试图将外部IP地址绑定到服务器,但事实证明这是不可能的。

是否有一些标志允许从外部IP连接?

1 个答案:

答案 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。路由器负责调整数据包标头,以便各方认为他们正在相互通信,而不知道路由器在中间。