游戏协议

问题描述:

是否有任何标准协议与巫婆,你可以使用游戏(如http,ftp),因为我有问题,当我测试一个随机端口(1024-65300)连接出(我不得不转发端口上我的路由器,它只能与一台计算机一起工作)。游戏协议

应该有,即时通讯程序使用的东西,就没有必要设立任何港口...

你有任何想法,我可以用什么?我用C++

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

+1

“Html”是文档格式,不是网络协议。通常用于传输html的协议称为http(“超文本传输​​协议”)。 – unwind 2009-06-11 12:54:33

+1

@unwind:错误。 HTTP是“超文本传输​​协议”,它是一种应用协议,而不是传输协议。 – aehlke 2009-07-30 14:10:40

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

至于协议,你应该使用TCP/IP或UDP,这取决于你需要做什么。如果您计划通过使用近似值(大多数FPS游戏执行此操作,以及任何需要非常快速反应的游戏)将TCP/IP更简单,则会大大降低UDP传播错误,并且更容易滞后。两者之间的主要区别在于UDP是“消失而忘记”,这意味着它不会检查消息是否实际到达目的地。

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

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

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

+1

我需要一些适用于每个路由器的东西(正如我所说的im程序和资源管理器工作(资源管理器使用html,我不知道如何在游戏中如何处理)) – csiz 2009-06-11 12:45:29

这个问题比使用特定的端口或协议通过NAT更复杂一点。你可以得到more information here.

大多数多人游戏使用UDP和端口不同,有些需要比其他更多。服务器端倾向于要求转发开放端口。

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

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

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

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

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