我目前正在用 Java 开发一款游戏。我将使用游戏本身创建一个启动器,并用一些 .exe 包装器对其进行包装。我需要帮助的是让游戏连接到某种服务器并检查用户的凭据是否真实:
- 用户名是真实的。
- 密码与用户名所列出的密码匹配。
- 用户已购买游戏(正确/错误)又称为用户溢价?
它必须与使用 PHP 和 HTML 的网站配合使用。当用户创建帐户时,它会存储在网站和游戏服务器本身中。此外,如果游戏有更新,它会通过从服务器获取文件来自动更新。
这个概念与 Minecraft 和 Planetside 2 等游戏非常相似。
最佳答案
根据您需要的交互的复杂性或级别,这可以通过简单的操作来完成,例如向网络服务器上的特定页面发出 GET 请求,并在查询字符串中提供必要的信息(或者您可以使用发布)。
// Construct the query string with the proper username and password
URL url = new URL("http://www.yoursite.com/verify.php?username=happy&password=pants");
try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()))) {
StringBuilder sb = new StringBuilder();
for (String s; (s = in.readLine()) != null;)
sb.append(s);
switch (sb.toString().trim()) {
case "welcome":
JOptionPane.showMessageDialog(null, "Welcome!");
// Proceed to game
break;
case "shut up and pay me":
JOptionPane.showMessageDialog(null, "You owe me money first!");
break;
case "no such user":
JOptionPane.showMessageDialog(null, "Go away!");
// Recursively delete all their files...
break;
}
}
其中 verify.php 有一些看起来像这样的 PHP 代码
// Set up database stuff...
// Query the database
$query = sprintf("SELECT * FROM friends users WHERE username='%s' AND password='%s'",
mysqli_real_escape_string($_GET["username"]),
mysqli_real_escape_string($_GET["password"]));
if (($result = mysqli_query($query)) && ($row = mysqli_fetch_assoc($result))) {
if ($row["license"] == "premium") {
echo "welcome";
} else {
echo "shut up and pay me";
}
} else {
echo "no such user";
}
但这只是您可以执行的操作的一个非常基本的示例,不应逐字遵循。您可能不应该通过 URL 的查询字符串传递这些值(这里可能更喜欢 POST 而不是 GET),并且最重要的是您不应该以纯文本形式存储或传递密码(即,首先使用 MD5、SHA1 或您选择的其他哈希对其进行哈希)。我这样做只是为了简单起见。
对于更复杂的事情,您可能需要使用已提供的其他方法之一,例如使用 sockets , web services等
如果您想了解有关在 Java 中使用 URL 的更多信息,可以找到 here 。或者,如果您想了解有关 PHP 的 Mysqli 的更多信息,您可以获取 here ,或者替换为您自己选择的包,例如 PEAR。
关于java - 如何用 Java 将服务器与游戏启动器互连?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18301308/