从服务器向所有连接的客户端发送消息
send message from server to all connected clients
如何使用套接字从服务器向所有连接的客户端发送消息,或者如何从服务器向任何特定客户端发送消息。我有如何做到这一点的概念,就像我必须列出所有连接到服务器的客户端,然后通过迭代每个客户端我可以发送消息,但如果有人可以通过 code.I 帮助我,我将不胜感激已经搜索了很多代码,但我没有从他们那里得到任何可观的帮助代码不应该是基于 GUI 的。感谢 advance.Sorry 我糟糕的英语。
假设您使用的是 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 块中
如何使用套接字从服务器向所有连接的客户端发送消息,或者如何从服务器向任何特定客户端发送消息。我有如何做到这一点的概念,就像我必须列出所有连接到服务器的客户端,然后通过迭代每个客户端我可以发送消息,但如果有人可以通过 code.I 帮助我,我将不胜感激已经搜索了很多代码,但我没有从他们那里得到任何可观的帮助代码不应该是基于 GUI 的。感谢 advance.Sorry 我糟糕的英语。
假设您使用的是 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 块中