C#,socket通过路由器

时间:2009-10-21 18:04:02

标签: c# sockets router

我为一款必须能够在P2P中运行的游戏制作了一个远程引擎。

它完全适用于局域网,但是当计算机位于路由器后面并希望通过互联网进行通信时会出现问题。

有没有解决方案,不需要操纵路由器配置? 因为我的大多数游戏玩家可能都没有在信息中得到很好的认可,所以我希望尽可能轻松地解决这个问题,而不需要他们的任何干预。

谢谢,

风筝。

2 个答案:

答案 0 :(得分:4)

您需要路由器后面的客户端启动OUTGOING连接。一旦确定,您就可以进行双向通信。这就是为什么大多数P2P游戏都有某种服务器来设置客户端之间的匹配。您可以让每个客户端为服务器建立一个套接字,然后将它们相互连接。

前段时间有一种叫做“NAT打孔”的替代方案,但我不确定它有多可靠。

这就是LogMeIn与VNC的区别。

答案 1 :(得分:1)

现在几乎所有家庭用户都支持NAT形式,在实践中无法设置真正的点对点通信,因为应用程序侦听端口无法从网络上访问。

理论上有UPnP允许应用程序(在提升的权限下运行)在家用路由器上动态启用端口转发(通过Internet Gateway Device Protocol),但实际上这是不可靠的,我没有'看到任何真正的用途。

最可靠的解决方案是拥有一个中心集线器(您的游戏服务器),可以在NAT设备后面发起连接的客户端之间转发数据包。但这对您来说是一笔巨大的成本,因为您需要提供配置和运营这些集线器的成本,这可能是一笔可观的资金,即使是像EC2这样的动态即时解决方案。

<强>更新

也许您可以使用Codeplex UPnP NAT traveral project