2016-06-30 4 views
1

Ich versuche, einen Server mit Java zu erstellen. Meine Frage ist: Wie mache ich, wenn ich mehrere Benutzer gleichzeitig habe? Die Antwort lautet: Multithreading. Aber ich weiß nicht wie.Muti - Thread-Webserver in Java

Zum Beispiel, wenn zwei Clients gleichzeitig verbunden sind, und ein Server (wer 2 * Nummer): Wenn der Client1 "50" an den Server und der Client 2 "10" sagt, ist der Server soll "100" an den ersten Client und "20" an den zweiten zurückgeben. Aber ich bin mir nicht sicher, ob mein Code funktioniert.

Server-Seite:

public class Server { 
public static void main(String[] args){ 
    ServerSocket socket; 
    try { 
    socket = new ServerSocket(4444); 
    Thread t = new Thread(new Accept(socket)); 
    t.start(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

class Accept implements Runnable { 
    private ServerSocket socketserver; 
    private Socket socket; 
    private int nbrclient = 1; 
    public Accept(ServerSocket s){ 
     socketserver = s; 
    } 
    public void run() { 
     try { 
      socket = socketserver.accept(); 
      in = new BufferedReader (new InputStreamReader (socket.getInputStream())); 
      String message = in.readLine(); 
      System.out.println(message); 

      out = new PrintWriter(socket.getOutputStream()); 
      out.println("Pong"); 
      out.flush(); 
      socket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Client-Seite:

public class Client { 
    public static void main(String[] zero) {  
     Socket socket; 
     BufferedReader in; 
     PrintWriter out; 
     try { 
      socket = new Socket(InetAddress.getLocalHost(),4444); 
      out = new PrintWriter(socket.getOutputStream()); 
      out.println("Ping"); 
      out.flush(); 
      in = new BufferedReader (new InputStreamReader (socket.getInputStream())); 
      String message = in.readLine(); 
      System.out.println(message); 
      socket.close(); 
     }catch (UnknownHostException e) { 
      e.printStackTrace(); 
     }catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

Wenn Sie irgendwelche Ideen haben (wie Multi-Threading zu tun ist und wie zu überprüfen, ob mein Code funktioniert, wie laufen zwei Clients. java und überprüfen, ob das Multi-Threading arbeitet)

+0

Haben Sie einen "Haupt" -Port, auf dem Ihr Server zuhört. Wenn der Client eine Verbindung zum Server herstellt, starten Sie einen neuen Thread mit einem neuen Port und weisen Sie den Client an, den neuen Port zu verwenden. – DwB

Antwort

1

auf der Serverseite benötigt eine while-Schleife:

public class Server { 
public static void main(String[] args){ 
    ServerSocket socket; 
    try { 
     while(true){ 
      socket = new ServerSocket(4444); 
      Socket socketInstance = socket.accept(); 
      Thread t = new Thread(new Accept(socketInstance)); 
      t.start(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

class Accept implements Runnable { 
    private Socket socket; 
    private int nbrclient = 1; 
    public Accept(Socket s){ 
     socket = s; 
    } 
    public void run() { 
     try { 

      in = new BufferedReader (new InputStreamReader (socket.getInputStream())); 
      String message = in.readLine(); 
      System.out.println(message);//this message should be your number 
      Double number = Double.parseString(message); 

      out = new PrintWriter(socket.getOutputStream()); 
      //out.println("Pong"); 
      out.println(2*number +""); 
      out.flush(); 
      socket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Die Client-Seite sieht gut aus. Ersetzen Sie einfach out.println("Ping"); durch out.println("50"); oder was immer Sie wollen.

Sie starten zuerst den Server und dann können Sie mehrere Client-Anwendungen starten. Wenn Sie Fehler haben, können Sie sie hier veröffentlichen und sich ein genaues Szenario ansehen.