Actualmente estoy jugando con Java para crear un servidor de autenticación para una aplicación de escritorio y hasta ahora he podido hacer que tanto el cliente como el servidor se comuniquen como un servidor de chat/cliente para empezar.Servidor de autenticación de socket?
Me doy cuenta de que solo conseguí una pequeña parte de él trabajando y hay muchas cosas por venir y aprender, pero ahora mismo en esta etapa me pregunto cómo se realiza la autenticación.
Por ejemplo, este es el código del servidor:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class LoginServer
{
public static void main(String[] args) throws Exception {
int port = 7000;
int id = 1;
ServerSocket loginserver = null;
try
{
loginserver = new ServerSocket(port);
System.out.println("LoginServer started...");
}
catch (IOException e) {
System.out.println("Could not listen on port: " + port);
System.exit(-1);
}
while (true)
{
Socket clientSocket = loginserver.accept();
ClientServiceThread cliThread = new ClientServiceThread(clientSocket, id++);
cliThread.start();
}
}
}
class ClientServiceThread extends Thread
{
Socket clientSocket;
int clientID = -1;
boolean running = true;
ClientServiceThread(Socket s, int i)
{
clientSocket = s;
clientID = i;
}
public void run()
{
System.out.println("Accepted Client : ID - " + clientID + " : Address - " + clientSocket.getInetAddress().getHostName());
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
while (running)
{
String clientCommand = in.readLine();
System.out.println("Client Says :" + clientCommand);
if (clientCommand.equalsIgnoreCase("quit"))
{
running = false;
System.out.print("Stopping client thread for client : " + clientID);
}
else
{
out.println(clientCommand);
out.flush();
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Como se puede ver, yo leo lo envía al cliente y la salida a la consola, así como la comprobación de si el cliente ha enviado un dejar de fumar o no comando
Lo que me pregunto es cómo haría yo para que el cliente sólo puede conectarse a que si el usuario y la contraseña se envían ?
O debería recibir siempre la conexión inicial y desde allí recibir la información de autenticación y si el cliente no ha enviado en digamos 3 segundos desconectarlos?
¿Cuál es la forma correcta de recibir las nuevas conexiones y autenticar a los usuarios con él?
gracias por su respuesta Me alegro de que no estuve muy mal, también traté de buscar cualquier fuente o ejemplos más directos a un sistema de socket de autenticación, pero no encontré ninguno como ejemplo y me ayudaron en esto, ¿no es así? ser capaz de darme una muestra de código corto, tal vez dirigirme a cualquier enlace que valga la pena consultar con respecto a la máquina de estado para un sistema de inicio de sesión o similar que podría ayudarlos? gracias una vez más – Guapo
realmente aprecio por tomarse el tiempo esto realmente me ayuda;) – Guapo