我有一个简单的回声服务器,我想当连接用户输入任何东西到服务器,所有其他客户端和该客户端将得到消息+“| MOD”。Java TCP Echo服务器 - 广播
它现在不会发送给所有的客户端,但它应该和我只是不知道我的代码有什么问题,所以现在它只会发送消息+“| MOD”给发送消息的客户端,而不是所有其他人也应该如此。
我只是不明白,我有一个循环遍历所有的客户,但它仍然不会发送给所有。
SERVER:
package com.murplyx.server;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server {
public static ServerSocket server;
public static ArrayList<Socket> clients = new ArrayList<Socket>();
public static void broadcast(String message) {
try {
for (Socket socket : clients) {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println(message);
}
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
try {
server = new ServerSocket(9000);
while (true) {
clients.add(server.accept());
for (Socket socket : clients) {
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = in.readLine();
if (line != null) {
broadcast(line + " | MOD");
}
}
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
客户:
package com.murplyx.client;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String args[]) {
try {
while (true) {
Socket socket = new Socket("localhost", 9000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
out.println(input.readLine());
System.out.println(in.readLine());
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
请帮助。
非常感谢。
在'Server.broadcast()',你应该在每次迭代结束时用'out.close()'关闭'PrintWriter'。 – colti
如果我没有记错,关闭PrintWriter将关闭底层套接字;如果您需要不止一次播放,我不会关闭它。 – Aify