【发布时间】:2017-09-08 08:03:14
【问题描述】:
我的服务器只需要向所有客户端发送消息。这个问题已经被问过很多次了,解决方案是创建一个数组列表并发送给所有人,只需迭代它调用所需的方法
我采用了在link here 找到的服务器示例
引用如下
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MultiThreadServer implements Runnable {
Socket csocket;
MultiThreadServer(Socket csocket) {
this.csocket = csocket;
}
public static void main(String args[]) throws Exception {
ServerSocket ssock = new ServerSocket(1234);
System.out.println("Listening");
while (true) {
Socket sock = ssock.accept();
System.out.println("Connected");
new Thread(new MultiThreadServer(sock)).start();
}
}
public void run() {
try {
PrintStream pstream = new PrintStream(csocket.getOutputStream());
for (int i = 100; i >= 0; i--) {
pstream.println(i + " bottles of beer on the wall");
}
pstream.close();
csocket.close();
} catch (IOException e) {
System.out.println(e);
}
}
}
只是我把run()中的代码改成了
boolean running = true;
public void run() {
while(running){
try {
InputStream inFromCli = csocket.getInputStream();
DataOutputStream out = new DataOutputStream(csocket.getOutputStream());
conns.add(out);
DataInputStream in = new DataInputStream(inFromCli);
String inMsg = in.readUTF();
String[] words= inMsg.split(" ");
if(".sendall".equals(words[0])){
for(DataOutputStream elem : conns){
elem.writeUTF("tgthrt");
elem.flush();
}
}
} catch (IOException e) {
running= false;
}
}
}
conns 是一个这样定义的数组列表:
ArrayList<DataOutputStream> conns = new ArrayList<>();
但是,当我迭代时,它不会发送给所有客户端。怎么修改?
【问题讨论】:
-
您未能发布最重要的部分:ArrayList 如何声明、创建、填充和传递给服务器。
-
见 conns.add()
标签: java networking server