Как хранить список Socket клиентов?(в ArrayList)

256
18 марта 2018, 21:05

Здравствуйте. Клиенты подключаются по сокету. Есть база. В базе есть записи принадлежащие только определенным клиентам. И если у какого-то клиента появляются данные, мне нужно эти данные отправить только ему, найдя его в ArrayList. Сейчас пробовал хранить чисто сокеты. Но в момент когда я его вытаскиваю из ArrayList и пытаюсь отправить сообщение выскакивает ConnectionClosed. Теперь пробую хранить выходные потоки из каждого сокета. Вообще как это можно реализовать? Помогите кто чем сможет.

Вот что есть у меня на данный момент:

public class MainSocket {
    //Главный серверСокет
    static ServerSocket serverSocket = null;
    static List<Socket> socketList = new ArrayList<>();
    static List<PrintWriter> writersFromSocket = new ArrayList<>();
    public static void main(String[] args) throws IOException {
        System.out.println("start main classa");
        serverSocket = new ServerSocket(5552);
        //Начинаем ожидать подключение клиентов
        while(true){
            Socket socket = serverSocket.accept();
            PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
            socketWriter.add(out);
            socketList.add(socket);
            System.out.println("список клиентов : " + socketList.size());
            System.out.println("ожидание нового подключения");
            //Когда есть новое подключение запускаем новый поток для работы с ним
            new SecondSocket(socket).start();
            for(int i =0;i<socketList.size();i++){
                System.out.println(socketList.get(i).getInetAddress());
                if(i==6){
                    Socket s = socketList.get(i);
                    if(s.isConnected()){
                        System.out.println("отправка записи к " +i+ "тому клиенту");
                        socketWriter.get(i).println("лалалала " +i+"тый клиент");
                        //тут клиенту ничего не приходит.
                        socketWriter.get(i).flush();
                    }
                }
            }
        }
    }
}
READ ALSO
День программиста. Как найти?

День программиста. Как найти?

Условие задачи: День программиста отмечается в 255-й день года (при этом 1 января считается нулевым днем)Требуется написать программу, которая...

231
Как высчитать ближайшие дни рождения с помощью LocalDate?

Как высчитать ближайшие дни рождения с помощью LocalDate?

Есть список контактов, каждый контакт содержит день рождения типа LocalDateНужно вывести все контакты, у которых день рождения в ближайшие 2 недели

209
Как создать таблицу в JDBC MySQL

Как создать таблицу в JDBC MySQL

Начал изучать Mysql, проблемы с синтаксисомНе могу создать таблицу

219
Почему у меня происходит утечка памяти? всего 3 класса

Почему у меня происходит утечка памяти? всего 3 класса

У меня есть главный поток(main(String [] args)) , в нем есть

195