2012-05-12 9 views
0

У меня есть сервер, и я пытаюсь отправить всем клиентам определенный ввод (строку). Мой код:Обработка всех клиентов на сервере Socket Java

serverSocket = new ServerSocket(SERVERPORT); 
      while (true) 
       { 
        // listen for incoming clients 
        Socket client = serverSocket.accept(); 
        mClients.add(client);       
        boolean finished = false; 
        try        
         { 
         for (int i=0; i<mClients.size(); i++) 
         { 
          Socket well = mClients.get(i); 
          DataInputStream in = new DataInputStream(well.getInputStream()); 
          PrintStream out = new PrintStream(well.getOutputStream());         
          // Print a message: 
          System.out.println("Client from : " + client.getInetAddress() + " port " + client.getPort()); 
          // now get the input from the socket...     

           while(!finished) 
           { 
            String st = in.readLine(); 
            // Send the same back to client 
            out.println(st); 
            // Write it to the screen as well 
            System.out.println(st); 
            // If the input was "quit" then exit... 
            if (st.equals("quit")) { finished = true; System.out.println("Thread exiting..."); } 
           } 
         } 

Как мне кажется, я делаю что-то неправильно. В любом случае я пытаюсь сохранить все подключенные сокеты к вектору, а затем отправить им строку, полученную одним из них. Правильно ли это?

ответ

0

В первом операторе while (true) выслушайте только входящие соединения, а затем создайте отдельный поток для обработки этого клиентского соединения.

Оттуда вы можете добавить каждый outPutStream, созданный в каждом потоке, в глобальный ArrayList. Перейдите через массивList (создайте метод для этого с параметром String) и напишите любое сообщение, которое вы хотите использовать в указанном методе.

Отъезд Oracle Tutorial on Socket Communication для оказания помощи

Смежные вопросы