gpt4 book ai didi

java - 如何使服务器将客户端重定向到另一台服务器?

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:00 25 4
gpt4 key购买 nike

所以我正在开发套接字编程项目,其中客户端首先连接到身份验证服务器,一旦登录成功,客户端就会连接到游戏服务器。

我现在创建了一个基本代码并对用户名/密码进行了硬编码,但稍后将使用数据库。

我面临的问题是登录成功后我不知道如何将客户端从身份验证服务器转移到游戏服务器

这是我处理登录部分的登录服务器头。

public class LoginServerThread extends Thread {
private Socket socket;

public LoginServerThread(Socket socket){
this.socket = socket;
}
@Override
public void run(){
try{
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("Client Connected");

PrintWriter output = new PrintWriter(socket.getOutputStream(),true);
String echoString;

boolean unlock = false;

while (!unlock){
output.println("USERNAME: ");
echoString = input.readLine();
if(echoString.equals("exit")){
break;
} else if (echoString.equals("username")){

for(int i = 0; i < 3;){
output.println("PASSWORD: ");
echoString = input.readLine();{

if(echoString.equals("password")){
output.println("Login Successful");
unlock = true;
break;

}else{
i++;
}
}
}
}
}


}catch (IOException e){
e.printStackTrace();
}finally {
try {
socket.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}

最佳答案

假设身份验证和游戏服务器部署在一个jvm中。登录成功时不关闭套接字,而是将套接字转移到GameServerThread:LoginServer只检查身份验证:

public class LoginServer {
private static final Logger log = LoggerFactory.getLogger(LoginServer.class);

public static void main(String[] args) throws Exception {
ServerSocket loginServer = new ServerSocket();
SocketAddress serverSocketAddress = new InetSocketAddress("localhost", 5230);
loginServer.bind(serverSocketAddress);
for (; ; ) {
Socket socket = loginServer.accept();
if (loginCHeck(socket)) {
// transfer to game server thread to process
log.info("socket check begin create thread to process");
new GameServerThread(socket).run();
} else {
// authentication failed process
}
}
}

public static boolean loginCHeck(Socket socket) {
// check authentication
return true;
}
}

公共(public)类 GameServerThread 扩展 Thread { 私有(private)Socket套接字;

public GameServerThread(Socket socket) {
this.socket = socket;
}

@Override
public void run() {
// do your really want to do
}

}

该方法有以下缺点:一个socket需要一个线程来处理,当有两个多个客户端时,服务器的线程可能会耗尽。为了克服这个问题,您可以使用Java NIO API来完成相同的工作。

关于java - 如何使服务器将客户端重定向到另一台服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54471354/

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