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

Java 从服务器向所有连接的客户端发送消息,java,messaging,Java,Messaging,如何使用套接字将消息从服务器发送到所有连接的客户端,或者如何将消息从服务器发送到任何特定的客户端。我有这样做的概念,就像我必须列出所有连接到服务器的客户端,然后通过迭代每个客户端,我可以发送消息,但如果有人可以通过代码帮助我,我将非常感激。我搜索了许多代码,但我没有从他们那里得到任何相当大的帮助。代码不应该基于GUI。提前谢谢。很抱歉我的英语不好。假设您使用的是java.net.ServerSocket,您可以使用以下方法保留所有客户端连接的哈希图: Map<Integer, java.n

如何使用套接字将消息从服务器发送到所有连接的客户端,或者如何将消息从服务器发送到任何特定的客户端。我有这样做的概念,就像我必须列出所有连接到服务器的客户端,然后通过迭代每个客户端,我可以发送消息,但如果有人可以通过代码帮助我,我将非常感激。我搜索了许多代码,但我没有从他们那里得到任何相当大的帮助。代码不应该基于GUI。提前谢谢。很抱歉我的英语不好。

假设您使用的是
java.net.ServerSocket
,您可以使用以下方法保留所有客户端连接的哈希图:

Map<Integer, java.net.Socket> clients = new HashMap<Integer, java.net.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();
}
for(Iterator iter=clients.keySet().Iterator();iter.hasNext();)
{
int key=iter.next();
java.net.Socket client=clients.get(key);
//将响应发送回客户端。
//注意:理想情况下,您希望所有这些都在try/catch/finally块中
OutputStream os=client.getOutputStream();
OutputStreamWriter osw=新的OutputStreamWriter(os);
BufferedWriter bw=新的BufferedWriter(osw);
写(“一些信息”);
bw.flush();
}
笔记:
  • 您需要一种从HashMap中清除客户端的方法;特别是如果您的服务器是长寿命的
  • 理想情况下,您希望将所有I/O代码(到客户端)放在try/catch/finally块中

As
socket.getLocalPort()
将始终返回相同的值,您不能将其用作所有连接客户端映射中的键。@EJP您是正确的。我把答案改为
socket.getPort()
非常感谢@MichaelMarkidisSir我有了这个方法你能帮我把这个消息发送给我自己选择的特定客户吗@MichaelMarkidis@zeeshannisar这取决于您想要如何识别客户。您希望使用什么标识符来筛选客户端?这取决于您的服务器体系结构!!
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();
}