一、用socket写群聊功能:
服务器端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server {
static List<Socket> accepts = new ArrayList<>();
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(4569);
while (true) {
Socket accept = serverSocket.accept();
accepts.add(accept);
new Thread(() -> {
try {
InputStream inputStream = accept.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println("用户" + accept.getPort() + ":" + line);
pushToAll(line,accept);
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
private static void pushToAll(String line, Socket accept) {
accepts.removeIf(socket -> socket.isClosed());
accepts.parallelStream().forEach(socket -> {
if (socket != accept) {
try {
socket.getOutputStream().write(("用户" + accept.getPort() + ":" + line + "\n").getBytes());
} catch (IOException e) {
try {
socket.close();
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
}
});
}
}
客户端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStrea