2012-06-18 103 views
0

我写了一个简单的字符程序winsock2在C中使用的例子在msdn.It工程,除非我试图连接到服务器通过未连接到相同的计算机路由器(使用网络的外部地址)从外部IP地址Winsock2连接

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

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

是否有某种允许来自外部IP的连接的标志?

+0

当绑定本地服务器套接字时,你使用的是'INADDR_ANY'吗?尝试绑定到外部地址时会遇到什么问题? –

+0

是的,我使用INADDR_ANY来绑定套接字,它的工作原理没有问题。但我无法将其与我的外部IP绑定,我得到了错误10049. –

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