title: how to send message to all connected client from server
body: <p>i've created an android application in which, android application act as the client, and server resides in the desktop application.</p>
  
  <p>suppose there are 10 android application runs the same at a time on 10 different android tablets, when one updation received from one tablet, the desktop application sends the updation to all other remaining tablets. how could the server knows how many clients are connected and how to send the message to all the clients</p>
  
  <p>what i plan is to run a server in all android so that when one updation received from one tablet, the desktop application sends the updation to all other remaining tablets.</p>
  
  <p>can anyone please tell me some suggestion regarding this.</p>
  
  <p><strong>Client side</strong></p>
  
  <pre><code>private int SERVER_PORT = 9999;
  class Client implements Runnable {
              private Socket client;
              private PrintWriter out;
              private Scanner in;
  
              @Override
              public void run() {
                  try {
                      client = new Socket("localhost", SERVER_PORT);
                      Log.d("Client", "Connected to server at port " + SERVER_PORT);
                      out = new PrintWriter(client.getOutputStream());
                      in = new Scanner(client.getInputStream());
                      String line;
  
                      while ((line = in.nextLine()) != null) {
                          Log.d("Client", "Server says: " + line);
                          if (line.equals("Hello client")) {
                              out.println("Reply");
                              out.flush();
                          }
                      }
  
                  } catch (UnknownHostException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  } catch (IOException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              }
  
          }
  </code></pre>
  
  <p><strong>Server class</strong></p>
  
  <pre><code>class ServerThread implements Runnable {
          private ServerSocket server;
  
          @Override
          public void run() {
              try {
                  server = new ServerSocket(SERVER_PORT);
                  Log.d("Server", "Start the server at port " + SERVER_PORT
                          + " and waiting for clients...");
                  while (true) {
                      Socket socket = server.accept();
                      Log.d("Server",
                              "Accept socket connection: "
                                      + socket.getLocalAddress());
                      new Thread(new ClientHandler(socket)).start();
                  }
              } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
          }
  
      }
  
      class ClientHandler implements Runnable {
  
          private Socket clientSocket;
          private PrintWriter out;
          private Scanner in;
  
          public ClientHandler(Socket clietSocket) {
              this.clientSocket = clietSocket;
          }
  
          @Override
          public void run() {
              try {
                  out = new PrintWriter(clientSocket.getOutputStream());
                  in = new Scanner(clientSocket.getInputStream());
                  String line;
                  Log.d("ClientHandlerThread", "Start communication with : "
                          + clientSocket.getLocalAddress());
                  out.println("Hello client");
                  out.flush();
                  while ((line = in.nextLine()) != null) {
                      Log.d("ClientHandlerThread", "Client says: " + line);
                      if (line.equals("Reply")){
                          out.print("Server replies");
                          out.flush();
                      }
                  }
              } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
  
          }
  
      }
  </code></pre>