代码之家  ›  专栏  ›  技术社区  ›  csiz

游戏协议

  •  1
  • csiz  · 技术社区  · 17 年前

    有没有任何标准的协议与巫婆,你可以使游戏(如HTTP,FTP),因为我有问题时,我测试了一个随机端口(1024-65300)的连接出(我必须转发我的路由器上的端口,它只能与一台计算机一次工作)。

    应该有,IM程序使用一些东西,不需要设置任何端口…

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

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

    5 回复  |  直到 17 年前
        1
  •  7
  •   Blank    17 年前

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

    对于协议,您应该使用TCP/IP或UDP,这取决于您需要做什么。如果你计划让你的客户端使用近似(大多数fps游戏都这样做,以及几乎所有需要快速反应的游戏),其中TCP/IP更简单,将大大减少传输中的错误,并且更容易出现延迟,那么udp是非常棒的。两者之间的主要区别在于,UDP是“发射并忘记”,这意味着它不需要检查消息是否真的到达了目的地。

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

    记住:网络连接需要两个部分,一个客户机和一个服务器。这意味着你要么有一个为游戏设置的中央服务器,要么你有一个玩家“主机”游戏(作为服务器,他需要打开他的端口)。其他玩家(所有玩家,在中央服务器设置中)连接到中央人,并通过他进行通信。这意味着你的游戏协议需要两部分,一个服务器端和一个客户端。大多数游戏中的客户机都是盲运行的,因为它发送用户的玩家信息,然后依靠服务器更新来告诉它游戏中的其他东西在哪里。服务器应该负责从所有客户机收集玩家信息,然后将这些信息分发给其他人。这可以包括验证(大多数操作)来防止“非法”事件在游戏中发生,但这取决于您自己。

        2
  •  1
  •   Brian R. Bondy    17 年前

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

        3
  •  0
  •   MSalters    17 年前

    一些路由器可以处理开放端口的UPNP请求。

        4
  •  0
  •   ChrisBD    17 年前

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

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

        5
  •  0
  •   Zan Lynx    17 年前

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

    因此,如果您的所有客户机都将UDP发送到一个中央服务器,那么该服务器可以收集所有的UDP端口信息并将其发送回每个客户机(再次通过UDP)。然后,每个客户机向彼此的客户机发送一个UDP包,以打开防火墙端口。这允许每个客户机直接与其他客户机交谈,而不是通过服务器。它仍然需要一个服务器,每个客户机都可以将其用作会议点。

    Skype和其他IM协议以及一些需要p2p访问的BitTorrent客户机都使用了这个技巧。

    它的一个问题是,所有的流量都是UDP,这使得连接不可靠,因此如果需要可靠性,您需要通过它实现自己的TCP版本。我相信有一些图书馆可以做到这一点。或者你也可以运行类似openvpn的程序,尽管这对于一个游戏来说似乎是多余的。

    推荐文章