2016-02-14 2 views
1

Я хочу отправить сообщение с сервера всем клиентам.Не удается отправить сообщения всем клиентам

Мой подход заключается в создании ArrayList всех клиентов, которые в настоящее время подключены к серверу. Если какой-либо клиент отправляет сообщение, я перебираю через ArrayList и отправляю каждому из клиентов сообщение.

Проблема в том, что мои клиенты не получают никаких сообщений.

Вот мой метод отправить на стороне сервера:

private void message() { 
    while (true) { 
     DataInputStream fromClient; 
     try { 
      fromClient = new DataInputStream(socketNew.getInputStream()); 
      message = fromClient.readUTF(); 
      for (Socket s:socs) { 
       System.out.println(message); 

       DataOutputStream toClient = newDataOutputStream(s.getOutputStream()); 
       toClient.writeUTF(message); 
      } 
      message=""; 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    }  
} 

Вот мой метод получить на стороне клиента:

private void receive_data() { 

    { 
     DataInputStream fromServer; 
     try { 
      fromServer = new DataInputStream(socket.getInputStream()); 
      message = fromServer.readUTF(); 
      console(message); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

Любые предложения о том, где я мог бы делать все это неправильно?
Спасибо за ваше время.

ответ

-1

Вы пишете OutputStream, но не смываете их.

for(Socket s:socs) 
{ 
     System.out.println(message); 
     DataOutputStream toClient=newDataOutputStream(s.getOutputStream()); 
     toClient.writeUTF(message); 
     toClient.flush(); 
} 

Вы также должны убедиться, что сервер получает сообщение от гнезда socketNew. Потому что он может быть заблокирован на ожидание ввода в строке:

message=fromClient.readUTF(); 

Кстати, создавая новые DataOutputStream для каждого сообщения не хороший подход.

+0

Я покраснел, но безрезультатно. Можете ли вы сказать мне альтернативный подход к этому? –

+0

Проверьте вторую половину ответа. Вы уверены, что получили сообщение. Попробуйте заменить сообщение = fromClient.readUTF(); с некоторым примером сообщения типа message = "foo"; –

+0

'DataOutputStreams' не нуждается в очистке, если нет под ним' BufferedOutputStream', которого нет здесь. – EJP

0
  • Вы не можете смешивать println() и readUTF(). Единственным, что readUTF() поймет записываются данные по writeUTF().
  • Вы должны использовать одни и те же потоки или чтение/запись для жизни сокета.
+0

Где я смешиваю println() и readUTF? Вы имеете в виду System.out.println (message)? –

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