Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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_Client Server - Fatal编程技术网

基于Java客户端/服务器的帮助

基于Java客户端/服务器的帮助,java,client-server,Java,Client Server,我正在尝试制作一个基于客户机/服务器回合的游戏。我希望这是一个两人的游戏。我将使用Java小程序作为客户端,以便人们可以通过浏览器在线玩游戏 到目前为止,我所知道的是,我可以创建一个接受所有传入连接的服务器,并创建一个线程来处理连接的客户端。我还可以编写连接到服务器的客户端。我不知道的是如何让两个独立的客户机彼此交互 小程序不能相互通信,因此通信必须通过服务器/线程完成(我假设) 我对Java并不陌生,但我以前从未做过任何网络工作。有人能帮我吗?你只要把服务器当作中间人就行了 客户机A向服务器发

我正在尝试制作一个基于客户机/服务器回合的游戏。我希望这是一个两人的游戏。我将使用Java小程序作为客户端,以便人们可以通过浏览器在线玩游戏

到目前为止,我所知道的是,我可以创建一个接受所有传入连接的服务器,并创建一个线程来处理连接的客户端。我还可以编写连接到服务器的客户端。我不知道的是如何让两个独立的客户机彼此交互

小程序不能相互通信,因此通信必须通过服务器/线程完成(我假设)


我对Java并不陌生,但我以前从未做过任何网络工作。有人能帮我吗?

你只要把服务器当作中间人就行了

  • 客户机A向服务器发送(写入)消息,其属性表示客户机B为目标
  • 服务器接收(读取)消息并将消息转发(写入)到客户端B
  • 客户端B接收(读取)消息

  • 在我看来,处理这种基于回合的游戏的最佳策略是确定一些基本的架构方法。绘制出组件和一些基本的游戏流程图

    您应该将大部分游戏引擎逻辑放在服务器组件中。客户机应尽可能精简,主要关注

  • 与游戏引擎的通信
  • 接受用户输入
  • 解释游戏引擎响应
  • 绘制屏幕
  • 您的服务器/游戏引擎应该是相对无状态的,但要维护当前游戏会话的列表。有状态SOAP web服务甚至HTTP servlet都是一个不错的选择,因为它们通过在请求中放置和读取会话cookie来为您维护会话

    web上的一切都是基于请求-响应的,因此本质上是无状态的,但某些技术(如Javaservlet)将帮助您维护会话,这样您就不必这样做。不需要物理上创建单独的线程,每个请求都会导致应用服务器产生一个新的执行线程,而会话本质上是不稳定的

    在服务器端,我将在会话中保留特定活动游戏的所有数据。这样,您的游戏引擎将维持两名玩家之间的有序通信

  • 玩家1发送回合结束请求和所有游戏状态更改信息
  • 游戏引擎解释请求,对游戏状态进行必要的更改
  • 玩家2经常发送请求,检查是否轮到玩家2了
  • 游戏引擎确认玩家2的回合请求,并发送新的游戏状态作为响应
  • 玩家2收到响应,更新游戏状态副本,记录自上次回合以来的变化
  • 冲洗并重复

  • 谢谢你的帮助!你说的大部分都是有道理的,我只是有点搞不清楚servlet将在哪里发挥作用。servlet本质上扮演服务器的角色。他们被要求提供信息,或者信息被发布到网站上。这是必要的,因为小程序之间不能直接对话。想想在战网上玩星际争霸吧。单个会话/游戏中有许多玩家,而Battle.NET是服务器。每个玩家都不断地向Battle.NET发送关于他们正在做什么的信息,作为回应,Battle.NET会发送关于其他玩家的更新信息。不要混淆服务器和主机。主机只是一个初始化会话参数的玩家。这是一个相当繁重的任务,所以不要气馁。在深入研究servlet及其功能之前,您需要牢牢掌握HTTP通信。有无数的在线教程教你这一点。当您理解了这个范例后,就可以深入研究如何制作简单的servlet,即请求一个web页面,返回HTML响应。然后,您可以进入更高级的servlet,如将Java对象序列化为HTTP请求,以及从servlet HTTP响应中反序列化Java对象。好的,为了说明这需要如何工作:客户端(游戏小程序):步骤1:向服务器发送连接请求步骤2:服务器接受连接,然后从servlet请求游戏信息。步骤3:根据来自servlet的信息,客户机执行任何必要的任务。步骤4:客户机再次开始向servlet请求信息的循环。服务器:步骤1:启动并侦听特定端口步骤2:接受连接,保存连接信息,然后继续侦听端口。游戏Servlet:步骤1:执行游戏小程序告诉它的任何操作,并返回一个响应。在写了所有这些之后,我似乎比我想象的更迷茫了。我认为值得注意的是,当用户通过登录屏幕登录小程序时,他们可以选择创建游戏或加入其他玩家创建的游戏。