Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java网络-客户端和服务器_Java_Sockets_Networking - Fatal编程技术网

Java网络-客户端和服务器

Java网络-客户端和服务器,java,sockets,networking,Java,Sockets,Networking,我对Java非常陌生,刚刚开始联网,所以我为任何愚蠢的问题提前道歉。我有一个基本的游戏,玩家(或机器人)可以在地图上移动,直到找到物品和出口,但通过网络,我希望玩家和机器人能够通过服务器同时在同一地图上玩 我有5门课: 游戏规则-控制游戏逻辑/规则 地图-包含地图 玩家-代表一个玩家 机器人-以机器人的身份玩游戏 PlayGame-通过CLI控制与游戏的交互。 我很确定游戏规则和地图会在服务器端,PlayGame会在客户端,但是我不确定机器人和玩家类在哪里?还有,我是将GameRule和Ma

我对Java非常陌生,刚刚开始联网,所以我为任何愚蠢的问题提前道歉。我有一个基本的游戏,玩家(或机器人)可以在地图上移动,直到找到物品和出口,但通过网络,我希望玩家和机器人能够通过服务器同时在同一地图上玩

我有5门课:

  • 游戏规则-控制游戏逻辑/规则
  • 地图-包含地图
  • 玩家-代表一个玩家
  • 机器人-以机器人的身份玩游戏
  • PlayGame-通过CLI控制与游戏的交互。
我很确定游戏规则和地图会在服务器端,PlayGame会在客户端,但是我不确定机器人和玩家类在哪里?还有,我是将GameRule和Map合并到一个类中,还是在每个类中放置一个套接字


非常感谢。

客户端-服务器游戏中的大多数模型都应该同时驻留在客户端和服务器上

  • 客户需要模型来可视化他们所持有的数据
  • 服务器需要他们根据业务逻辑对其进行修改——然后将中间结果发送给客户机以更新其模型。服务器必须这样做,因为这就是它存在的原因:通过成为唯一可以改变游戏状态的节点来保持游戏状态的一致性
你可以试着把所有的模型都放在客户机上,但是想象一下,当你想用N个客户机做游戏时,你会陷入怎样的编码恐惧。它们都必须有一个一致的状态。让一个节点(服务器)做出决策,然后其他节点必须按照指示操作,这要安全得多


请注意,在更高级的实现中,如实时游戏,客户端还实现了一些预测行为来隐藏客户端-服务器延迟,从而临时改变游戏状态,但服务器命令总是推翻客户端的决定。您还可以对客户机进行编码,使其始终能够继续播放,即使他尚未收到服务器对之前“移动”的确认-当服务器拒绝某些移动时,您必须实现回滚/更正功能

根据业务逻辑的复杂性和所需的同步时间,完全可以将大部分内容保留在客户机级别,只需将服务器用作更新的代理。想象一个两人在线象棋游戏。规则是如此标准,时间是简单的来回,所以这个游戏的“服务器”只需要将每个动作从一个玩家来回传递给另一个玩家。就像用一个插座替换你祖父象棋比赛中的邮件一样。每个(客户端)都确切地知道如何处理移动以及哪些新的移动是有效的。

无论如何,您最终必须在两个项目之间共享代码。这就是服务器-客户机体系结构的命运。