gpt4 book ai didi

java - 用于游戏登录/身份验证的Java套接字服务器

转载 作者:行者123 更新时间:2023-12-03 11:53:15 24 4
gpt4 key购买 nike

我目前正在使用Java.net。*下的类针对正在创建的MMORPG开发Java应用程序。它将与Unity3D游戏连接(使用TCP的.NET套接字)。我不确定如何处理播放器的登录/身份验证。

有什么建议吗?我当时正在考虑通过https上的安全表单来处理身份验证,在数据库中创建并存储一个临时登录 key ,然后将 key 发送回客户端,分配给他们一分钟的时间以使用随机生成的 key 连接到游戏服务器。这是一个安全可靠的解决方案,还是我可以做得更好?

服务器等级

import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Server extends Thread {

public static final int MAX_CLIENTS = 500;

private ServerSocket listener;
protected ArrayList<Client> clients;

public Server(int listenPort) throws IOException {
listener = new ServerSocket(
listenPort, MAX_CLIENTS,
InetAddress.getLocalHost()
);

clients = new ArrayList<Client>();
}

@Override
public void run() {
while (true) {
try {
Socket socket = listener.accept();
Client client = new Client(socket, this);
clients.add(client);

new Thread(client).start();
} catch (IOException e) {}
}
}

public static void main(String[] args) throws IOException {
new Server(4428).start();
}
}

客户类别
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Client implements Runnable {

private Socket socket;
private Server server;
private BufferedReader in;
private PrintWriter out;

public Client(Socket sock, Server serv) {
socket = sock;
server = serv;
in = null;
out = null;
}

@Override
public void run() {
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);

while (true) {
// Read Data with read()
}
} catch (IOException e) {}
}

public void read() throws IOException {
}

public void send(String data) {
}
}

最佳答案

我建议使用HTTPS进行登录和重要的帐户操作(购买/出售/转移项目)。当客户端通过HTTPS登录到服务器时,服务器应生成一个长(64-128字节)的随机 session ID,该ID将存储在数据库中。还为客户端的TCP连接生成一个临时的一次性身份验证 token (长随机值)。

使用HTTPS的原因是为了帮助阻止MITM攻击窃取游戏 Assets 中的用户。

如果客户端和服务器之间的流量很低,则可以使用TLS套接字而不是普通的TCP套接字。只需确保让客户端验证(由受信任的CA签名并且域匹配)服务器的证书即可。

即使您对重要的 Action 使用HTTPS,MITM攻击也仍然会干扰用户的 Action (移动,攻击,聊天)或改变用户的视线(隐藏怪物或其他用户)。

关于java - 用于游戏登录/身份验证的Java套接字服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16762085/

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