无法向所有客户端发送消息

时间:2016-02-14 15:11:27

标签: java networking client-server chat

我想从服务器向所有客户端发送消息。

我的方法是为当前连接服务器的所有客户端创建一个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();
        }
    }   
}

关于我可能在哪里做错的任何建议都是错的? 谢谢你的时间。

2 个答案:

答案 0 :(得分:0)

  • 您无法混合println()readUTF(). readUTF()唯一能理解的是由writeUTF().
  • 撰写的数据
  • 您需要在套接字的生命周期内使用相同的流或读取器/写入器。

答案 1 :(得分:-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并不是一个好方法。