【问题标题】:Deploy Server Client Multiplayer to heroku将服务器客户端多人游戏部署到heroku
【发布时间】:2014-05-19 05:46:50
【问题描述】:

我有一个在控制台中运行的简单服务器 - 客户端井字游戏,我在本地主机上成功运行了此代码,我现在需要在服务器上部署服务器代码,例如 Heroku,或任何其他托管站点除了我做主持人之外,我已经按照 Heroku 教程学习了,但仍然无法弄清楚其余的 https://devcenter.heroku.com/articles/java

这是我的服务器代码

public class TCPServer {
    public static void main(String argv[]) throws Exception {
        // String clientSentence;
        ServerSocket welcomeSocket = new ServerSocket(6780);

        BufferedReader[] inFromClient = new BufferedReader[2];
        Socket[] connectionSocket = new Socket[2];
        DataOutputStream[] outToClient = new DataOutputStream[2];
        String labels = "XO";
        for (int i = 0; i < 2; i++) {
            connectionSocket[i] = welcomeSocket.accept();
            inFromClient[i] = new BufferedReader(new InputStreamReader(connectionSocket[i].getInputStream()));
            outToClient[i] = new DataOutputStream(connectionSocket[i].getOutputStream());
            outToClient[i].write(labels.charAt(i));
            System.out.println("one is here");
        }
        int next = 0;
        while (true) {
            String s = inFromClient[next].readLine();
            next ^= 1;
            outToClient[next].writeBytes(s + "\n");
        }
    }
}

这是我的客户端代码

class TCPClient {
    public static void main(String argv[]) throws Exception {
        String sentence;
        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
        Socket clientSocket = new Socket(server, port);
        DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        char[][] XO = new char[3][3];
        for (char[] arr : XO)
            Arrays.fill(arr, '-');
        char playerSign = (char) inFromServer.read();
        boolean turn = false;
        if (playerSign == 'X')
            turn = true;
        while (true) {
            if (turn) {
                sentence = inFromUser.readLine();
                String[] split = sentence.split(" ");
                int a = Integer.parseInt(split[0]);
                int b = Integer.parseInt(split[1]);
                if (XO[a][b] != '-')
                    continue;
                outToServer.writeBytes(sentence + '\n');
                XO[a][b] = playerSign;
                turn = false;
            } else {

                String next = inFromServer.readLine();
                String[] split = next.split(" ");
                XO[Integer.parseInt(split[0])][Integer.parseInt(split[1])] = playerSign == 'X' ? 'O' : 'X';
                turn = true;
            }
            for (char[] arr : XO)
                System.out.println(new String(arr));

        }
        // clientSocket.close();
    }
}

现在我已经尝试在 heroku 上放置相同的服务器代码,但没有成功。我确定我弄错了,我不确定我的客户端应该连接到哪个服务器和端口,在这件事上的任何帮助都将不胜感激

【问题讨论】:

  • 如果有人能告诉我是否有服务器甚至付费,我也将不胜感激,我可以直接上传代码而无需更新。
  • 这不是和stackoverflow.com/questions/16574085/…基本一样的问题吗?那里给出的答案也将适用于这个问题。
  • 实际上知道那里的解决方案是行不通的,因为每次您使用 http 连接进行连接时,所有服务器代码都会再次重新启动每件事,这基本适合所指出的问题,因为它只是打印时间,而现在您正在监视两个正在玩游戏的客户,那您会怎么做;这就是为什么我将帖子修改为此
  • 服务器可能正在崩溃,可能至少部分原因是您没有在 Heroku 分配给您的应用程序的端口上进行监听(该问题及其解决方案都在您的另一个问题中进行了描述)。

标签: java sockets heroku


【解决方案1】:

Heroku 首先不支持 TCP 协议,其次,您必须将您的服务器绑定到该服务为您提供的端口。例如,在 node.js 中,您使用 process.env.PORT 访问它,但是我承认我对通过 Java 访问这个变量的无知。但是即使你确实使用了他们提供的端口,也只支持 HTTP 和 HTTPS(如果你通过他们的实验室启用了 websockets),但它们不支持 TCP。

【讨论】:

    猜你喜欢
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2022-10-26
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    相关资源
    最近更新 更多