从服务器向java中的多个客户端发送消息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从服务器向java中的多个客户端发送消息相关的知识,希望对你有一定的参考价值。
我正在创建一个聊天服务器程序,我已经使用了这里编写的代码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);
}
请知道它会帮助我:)谢谢
答案
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);
}
}
以上是关于从服务器向java中的多个客户端发送消息的主要内容,如果未能解决你的问题,请参考以下文章