gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:41 24 4
gpt4 key购买 nike

我有一个简单的服务器 - 客户端井字棋游戏,在控制台中运行,我在本地主机上成功运行了此代码,我现在需要的是将服务器代码部署在服务器上,例如 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上,但它不起作用。我确信我遇到了问题,并且我不确定我的客户端应该连接到哪个服务器和端口,在这件事上的任何帮助将不胜感激

最佳答案

Heroku 首先不支持 TCP 协议(protocol),其次,你必须将你的服务器绑定(bind)到服务为你提供的端口。例如,在 Node.js 中,您可以使用 process.env.PORT 访问此变量,但是我承认我在通过 Java 访问此变量时一无所知。但即使您确实使用了他们提供的端口,也仅支持 HTTP 和 HTTPS(如果您通过他们的实验室启用了 Websockets,则还支持 Websocket),但他们不支持 TCP。

关于java - 将服务器客户端多人游戏部署到heroku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16586314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com