从服务器向java中的多个客户端发送消息

问题描述 投票:-1回答:1

我正在创建一个聊天服务器程序,我已经使用了这里编写的代码http://makemobiapps.blogspot.com/p/multiple-client-server-chat-programming.html,我想在其中添加一些更改,我试图让服务器向所有连接的客户端发送消息。我添加了这段代码。但它不起作用。它以不正确的方式将消息发送给客户端,就像它只将消息发送给一个客户端一样。然后它停止接受任何客户端连接到网络。

这是我使用Scanner添加的代码

while (true) {  
    try {
    int i = 0; 
    clientSocket = serverSocket.accept(); 
    for (i = 0; i < maxClientsCount; i++) {
      if (threads[i] == null) {                           
        (threads[i] = new clientThread(clientSocket, threads)).start();
        break;
      }        
    }
  // this my code I add to broadcast a message to all clients
    if(!in.nextLine().isEmpty() ){
      for (i = 0; i < maxClientsCount; i++) {
      PrintStream os = new PrintStream(clientSocket.getOutputStream());
      os.println("Server :"+in.next());
        }
    }

    if (i == maxClientsCount) {
      PrintStream os = new PrintStream(clientSocket.getOutputStream());
      os.println("Server too busy. Try later.");
      os.close();
      clientSocket.close();
    }        
  }
  catch (IOException e) {
    System.out.println(e);
  }

请知道它会帮助我:)谢谢

java multithreading sockets synchronization client-server
1个回答
1
投票
for (i = 0; i < maxClientsCount; i++) {

在这里,你在0和i之间循环maxClientsCount

  PrintStream os = new PrintStream(clientSocket.getOutputStream());

在这里,您正在写入最近接受的套接字maxClientsCount-1次,并完全忽略i

  os.println("Server :"+in.next());

在这里,您每次都在循环中从Scanner读取一个新令牌。

这没有多大意义。当然你的意思是:

String line = in.nextLine();
if(!line.isEmpty() ){
  for (i = 0; i < maxClientsCount; i++) {
    if (threads[i] == null)
      continue;
    PrintStream os = new PrintStream(threads[i].getSocket().getOutputStream());
    os.println("Server :"+line);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.