Socket Serveur D'Authentification?
Je suis en train de jouer avec java pour créer un serveur d'authentification pour une application de bureau et pour l'instant j'ai été en mesure de faire à la fois le client et le serveur communiquent comme un chat client/serveur pour un début.
Je ne rends compte que je n'obtient qu'une petite partie de ce travail et il y a beaucoup de choses à venir et à apprendre, mais maintenant, à ce stade, je me demande comment l'authentification se fait.
Par exemple, c'est le code du serveur:
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();
}
}
}
Comme vous pouvez le voir, je n'ai lu que le client envoie et la sortie de la console ainsi que de vérifier si le client a envoyé une arrêter ou non la commande.
- Ce que je me demande c'est comment je ferais
de sorte que le client ne peut se connecter
si l'utilisateur et le mot de passe a été
envoyé ? - Ou devrais-je reçois toujours le
connexion initiale et à partir de là
recevoir l'authentification
informations et si le client n'a pas
envoyé disons 3 secondes
déconnecter ? - Quelle est la bonne façon de recevoir
les nouvelles connexions et de s'authentifier
les utilisateurs avec elle ?
OriginalL'auteur Guapo | 2011-03-16
Vous devez vous connecter pour publier un commentaire.
Vous avez eu la bonne idée, mais vous avez besoin de penser plus comme une machine à état.
Un client se connecte, il serait nécessaire d'aller dans l'état de Connexion, là où vous l'attendez pour envoyer des informations d'authentification. Si elle est incorrecte ou de l'expiration, de la déconnexion.
Si elle est correcte, passez à la Commande de l'état de Traitement. Si vous recevez une commande quit, passez à un Nettoyage de l'état, ou tout simplement le débrancher.
Voici un aperçu général:
Votre
processLogin
fonction pourrait ressembler à ceci:Et votre
processCommand
fonction:La
state
variable d'instance serait susceptible d'être un enum. Vous pouvez voir que l'utilisation de ce modèle va vous donner quelques assez simple d'extensibilité. Par exemple, une commande peut vous laisser dans un état différent de l'état du processus de sous-commandes.vraiment apprécier de prendre le temps cela m'aide vraiment 😉
OriginalL'auteur Jonathan