【问题标题】:Allowing clients to talk to the server in order允许客户端按顺序与服务器对话
【发布时间】:2017-07-18 00:49:49
【问题描述】:

我对我希望客户端如何按顺序与服务器通信感到困惑。例如,我正在创建一个多人井字游戏,其中 2 个客户端将连接到游戏服务器。然后客户轮流输入 x 的坐标。但是,当我在我的 while 循环中使用 break 时,它只允许它们进入一次,然后断开套接字。我该怎么做才能让客户端在其他客户端回答时暂时被阻止?

编辑:我不打算为此目的使用多线程。

服务器(为阅读目的而截断):

try {
        while (true) {
            System.out.println("Awaiting connection!");
            Socket clientSocket = server.accept();
            System.out.println("Player " + noOfPlayers + " has connected!");
            noOfPlayers ++;
            out = new PrintWriter(clientSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

            while (!newGame.checkWinner()) {
                out.println(newGame.currentPlayer());
                input = in.readLine();
                x = Integer.parseInt(input.split("\\,+")[0]);
                y = Integer.parseInt(input.split("\\,+")[1]);
                newGame.addPoint(x, y);
                out.println("Moved");
                if (newGame.checkWinner()) {
                    System.out.println("The winner is " + newGame.currentPlayer());
                    out.println("The winner is " + newGame.currentPlayer());
                    server.close();
                    break;
                }
                else if (newGame.boardFilledUp()) {
                    newGame.loadBoard();
                    out.println("It's a draw!");
                    server.close();
                    break;
                }
                newGame.loadBoard();
                newGame.changePlayer();
                break;
            }
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

客户端(为阅读目的而截断):

while (true) {
        PrintWriter out = new PrintWriter(echoSocket.getOutputStream(), true);
        // Read input from server
        BufferedReader in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
        // Read input from client
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter your coordinates in x,y form: ");
        String userInput;
        char serverOutput;
        serverOutput = in.readLine().charAt(0);
        System.out.println("Current player is " + serverOutput);
        while ((userInput = stdIn.readLine()) != null) {
            out.println(userInput);
            System.out.println("You sent: " + userInput);
        }
        break;
    }

【问题讨论】:

  • 您只需告诉您的客户“等待对方移动”。
  • @BalazsVago 你的意思是让客户端检查是否有来自服务器的字符串确认?
  • 始终从服务器端控制游戏,让任何从客户端控制的东西都可能导致“作弊”:)。是的,让客户端点击任意位置,但让客户端知道服务器的想法。
  • 是的,我的游戏功能在服务器端运行!目前它是 tic tac toe 的控制台版本。我已经在问题中添加了我的代码,所以也许你可以帮我看看?如果我没记错的话,我认为这与 readLines() 方法有关。
  • 为什么在翻转玩家之后就打破游戏主循环?!

标签: java sockets networking server client


【解决方案1】:

找出问题所在。我没有刷新 PrintWriter。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-10
    • 2013-03-18
    • 2013-05-02
    • 2012-08-21
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多