c++ - 游戏协议(protocol)

标签 c++ networking

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

应该有,im程序用了一些东西,不需要设置任何端口...

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

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

最佳答案

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

至于协议(protocol),您应该使用 TCP/IP 或 UDP,具体取决于您需要做什么。如果您计划让您的客户端通过使用近似值(大多数 FPS 游戏都这样做,以及任何需要非常快速 react 的游戏)来让您的游戏帐户丢失信息,那么 UDP 非常有用,其中 TCP/IP 更简单,将大大减少传输中的错误,并且更容易滞后。两者之间的主要区别在于 UDP 是“即发即忘”,这意味着它不会费心检查消息是否确实到达了目的地。

至于上面的协议(protocol),你提到了http和ftp。我强烈建议两者都不使用。当您在自定义端口上使用直接套接字通信时,您可以完全自由地制作自己的协议(protocol)供游戏使用。只要它通过来回发送数据包来完成它的工作,关于它的一切就完全由你决定,而且应该由你决定。毕竟,游戏协议(protocol)需要快速,除非您确实需要,否则您不希望来自 http 的所有这些额外的 header 垃圾阻塞您的网络传输。

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

关于c++ - 游戏协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/980846/

相关文章:

c++ - 使用单独编译时返回 typedef 类型

c++ - 如何将用户定义的类用作模板类的一种类型,并正确地为这两个类重载 <<?

wcf - 有谁知道使用 WCF 为非 .NET 客户端公开 SOAP 接口(interface)的任何问题?

c - 在 TCP 流中发送消息

c++ - 调用复制 ctor 和另一个 ctor

c++ - 删除绑定(bind)到成员函数的 vector<std::function<...>> 的任何元素

c++ - 来自 .txt 文件的结构数组

ios - 我如何检测我在 ios 中使用的是哪种类型的网络?

java - 通过 Java Socket 和 ServerSocket 类连接到服务器

azure - 有没有办法列出应用程序安全组中的所有虚拟机