从服务器向所有连接的客户端发送消息

时间:2016-04-24 21:43:22

标签: java messaging

如何使用套接字从服务器向所有连接的客户端发送消息,或者如何从服务器向任何特定客户端发送消息。我有如何做到这一点的概念,就像我必须列出连接到服务器的所有客户端,然后通过迭代每个客户端我可以发送消息,但我会感谢任何人可以通过代码帮助我。我已经搜索许多代码,但我没有得到任何相当大的帮助代码不应该是基于GUI。提前谢谢。我的英语不好。

1 个答案:

答案 0 :(得分:1)

假设您使用的是java.net.ServerSocket,您可以使用以下内容保留所有客户端连接的HashMap:

Map<Integer, java.net.Socket> clients = new HashMap<Integer, java.net.Socket> ();

缓存客户端

现在,每当您收到与服务器的新客户端连接时,您都可以将新客户端添加到地图中:

socket = serverSocket.accept();

// Add the socket to a HashMap
clients.put(socket.getPort(), socket);

当您想向所有客户发送消息时:

迭代所有客户:

for (Iterator<Integer> iter = clients.keySet().iterator(); iter.hasNext(); )
{
    int key = iter.next();

    java.net.Socket client = clients.get(key);

    // Sending the response back to the client.
    // Note: Ideally you want all these in a try/catch/finally block
    OutputStream os = client.getOutputStream();
    OutputStreamWriter osw = new OutputStreamWriter(os);
    BufferedWriter bw = new BufferedWriter(osw);
    bw.write("Some message");
    bw.flush();
}

说明:

  • 您将需要一种从HashMap中清除客户端的方法;特别是如果你的服务器很长寿。
  • 理想情况下,您需要将所有I / O代码(到客户端)放在try / catch / finally块中