2011-07-14 19 views
2

Je dois créer un serveur socket qui va écouter plusieurs clients. Supposons qu'il y ait 6 clients connectés au serveur en même temps et que chacun des clients envoie des commandes au serveur en même temps. Si ces clients envoient le message au serveur toutes les 1 seconde, comment puis-je gérer ces messages des 6 clients côté serveur pour les stocker dans la table et les accusés de réception pour chaque client.Socket Server avec plusieurs clients en Java

Comment puis-je gérer ces entrées à partir du client. Si je dois créer 6 threads pour gérer ces entrées du client.

S'il vous plaît donnez-moi une idée pour aborder ce problème.

Répondre

0

Quelle que soit la raison pour laquelle vous ne pouvez pas utiliser un conteneur de servlet pour cela? Ceci est 10 lignes de code dans une servlet + Tomcat/Jetty.

+0

L'exigence est dans le socket.Anyway pouvez-vous me guider dans le servlet. – bharathi

3

Créez un nouveau thread par connexion client et faites continuellement une lecture de blocage sur les flux dans chaque thread pour rechercher les données à traiter.

class Server { 

    ClientThread threads[]; 
    int    size; 
    ServerSocket serverSocket; 
    boolean   active; 

    Server() throws Exception { 
     /* initialize connection */ 
     active = true; 
     listen(); 
    } 

    void listen() throws Exception { 
     while (active) { 
      Socket clientSocket = serverSocket.accept(); 
      threads[ size++ ] = new ClientThread(clientSocket); 
      threads[ size - 1 ].start(); 
     } 
    } 
} 

class ClientThread extends Thread { 

    OutputStream out; 
    InputStream  in; 
    boolean   active; 

    ClientThread(Socket clientSocket) throws Exception { 
     out = clientSocket.getOutputStream(); 
     in = clientSocket.getInputStream(); 
    } 

    public void run() { 
     active = true; 
     while (active) { 
      listen(); 
     } 
    } 

    private void listen() { 
     try { 
      int res = process(in.read()); 
      out.write(res); 
     } catch (Exception e) {} 
    } 

    private int process(int b) { 
     return -1; 
    } 
} 
+0

+1, mais avec des réserves. Je n'appellerais pas cela «sondage», je dirais que c'est un blocage, et vous devriez certainement faire quelque chose à propos d'EOS. – EJP

+0

Oui, la boucle while m'a fait penser au sondage au début, même si je connaissais les blocs read(). Merci pour l'information. – blackcompe

Questions connexes