游戏协议

时间:2009-06-11 12:40:16

标签: c++ networking

是否有任何标准协议可以制作游戏(如http,ftp),因为我在随机端口(1024-65300)上测试连接时遇到问题(我必须转发路由器上的端口)它一次只能用于一台计算机。)

应该有,我的程序使用的东西,没有必要设置任何端口......

你知道我能用什么吗?我用c ++

P.S。我会对类似于http的东西感兴趣,有人发送请求而另一个发送响应。我在HTML中看到你必须发送到ip / index.html或类似的东西,我真的不懂如何使用...

5 个答案:

答案 0 :(得分:7)

IM程序不需要任何开放端口,因为它们是客户端程序。作为一般规则(注意出站防火墙),所有端口都对客户端上的传出连接开放。为了实际接受连接,端口必须允许传入流量。例如,大多数服务器可以接受所有端口上的传入流量。网络通信和协议的设计考虑到了这一点:客户端(您的浏览器)始终启动与服务器(网站)的连接,而不是相反。

对于协议,您应该使用TCP / IP或UDP,具体取决于您需要执行的操作。如果您计划通过使用近似值(大多数FPS游戏执行此操作,以及几乎任何需要快速反应的游戏)计划让您的客户端为游戏帐户丢失信息,那么UDP非常棒,其中TCP / IP更简单,将大大减少传输错误,更容易滞后。两者之间的主要区别在于UDP是“火上浇油”,这意味着它无需检查消息是否实际到达目的地。

至于协议,你提到了http和ftp。我非常建议不要使用。当您在自定义端口上使用直接套接字通信时,您可以自由地制作自己的游戏协议以供游戏使用。只要它通过来回发送数据包来完成它的工作,其他一切都完全取决于你,应该是。毕竟,游戏协议需要快速,你不希望http中的所有这些额外的头垃圾堵塞你的网络传输,除非你真的需要它。

请记住:网络连接需要两个部分,即客户端和服务器。这意味着您要么为游戏设置了中央服务器,要么让一个玩家“主持”游戏(充当服务器,他将需要打开他的端口)。其他玩家(所有玩家,在中央服务器设置中)连接到中央人,并通过他传递通信。这意味着您的游戏协议需要两个部分,即服务器端和客户端。大多数游戏中的客户端都是盲目的,因为它会发送有关用户的玩家信息,然后依靠服务器更新来告诉游戏中的其他所有内容。服务器应负责从所有客户端收集玩家信息,然后将该信息分发给其他人。这可以包括验证(大多数情况下)以防止游戏中发生“非法”事件,但这取决于你。

答案 1 :(得分:1)

问题比仅使用特定端口或协议来通过NAT要复杂一些。您可以获得more information here.

答案 2 :(得分:0)

某些路由器可以处理打开端口的UPnP请求。

答案 3 :(得分:0)

大多数多人游戏都使用UDP而且端口各不相同,有些需要比其他游戏更多。服务器端往往需要转发开放端口。

为了做到这一点,你显然会深入研究套接字编程。 玩得开心:))

答案 4 :(得分:0)

另一个UDP优势和防火墙技巧是,对于大多数防火墙,如果内部客户端发送UDP数据包,防火墙会在外部打开一个UDP端口,可以接受外部数据包并将其转发回源。

因此,如果所有客户端都将UDP发送到中央服务器,则该服务器可以收集所有UDP端口信息并将其发送回每个客户端(再次通过UDP)。然后每个客户端向另一个客户端发送UDP数据包以打开防火墙端口。这使得每个客户端可以直接与其他客户端通信,而不是通过服务器。它仍然需要一个服务器,每个客户端都可以用作会合点。

这个技巧被Skype和其他IM协议以及一些需要P2P访问的B​​itTorrent客户端使用。

它的一个问题是所有流量都是UDP,这使得连接不可靠,因此如果需要可靠性,则需要在其上实现自己的TCP版本。我相信有一些图书馆可以做到这一点。或者你可以运行类似OpenVPN的东西,尽管这对游戏来说似乎有些过分。