Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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 将服务器客户端多人游戏部署到heroku_Java_Sockets_Heroku - Fatal编程技术网

Java 将服务器客户端多人游戏部署到heroku

Java 将服务器客户端多人游戏部署到heroku,java,sockets,heroku,Java,Sockets,Heroku,我有一个简单的服务器-客户端Tic-Tac-Toe游戏,它运行在控制台上,我成功地在本地主机上运行了这段代码。我现在需要的是在服务器上部署服务器代码,比如Heroku,或者任何其他主机站点,而不是我作为主机,我已经遵循了Heroku教程,但仍然无法理解其余的部分 这是我的服务器代码 public class TCPServer { public static void main(String argv[]) throws Exception { // String cli

我有一个简单的服务器-客户端Tic-Tac-Toe游戏,它运行在控制台上,我成功地在本地主机上运行了这段代码。我现在需要的是在服务器上部署服务器代码,比如Heroku,或者任何其他主机站点,而不是我作为主机,我已经遵循了Heroku教程,但仍然无法理解其余的部分

这是我的服务器代码

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");
        }
    }
}

现在,我已经尝试在heroku上使用相同的服务器代码,但没有成功。我确信我搞错了,我也不确定我的客户端应该连接到哪个服务器和端口,在此问题上的任何帮助都将不胜感激。Heroku首先不支持TCP协议,其次,您必须将服务器绑定到服务提供给您的端口。例如,在node.js中,您可以使用
process.env.PORT
访问这个变量,但是我承认我不知道如何通过Java访问这个变量。但是,即使您确实使用了他们提供的端口,也只支持HTTP和HTTPS(如果您通过他们的实验室启用了WebSocket,则支持WebSocket),但它们对TCP没有任何支持。

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

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