Должен ли я повторно открывать потоки ввода / вывода сокета каждый раз, когда я хочу отправить данные с сервера чата - PullRequest
0 голосов
/ 20 октября 2018

Я недавно начал изучать Android и в настоящее время изучаю основы Java на edx.org.Я создаю приложение чата (клиент / сервер).прямо сейчас все, что я хочу сделать, это отображать сообщение «пользователь подключен» всем пользователям, когда подключается любой новый пользователь.Я сохраняю поток вывода каждого пользователя в ArrayList.

1 - Это нормально?Должен ли я хранить полный сокет?

Во-вторых, сначала мой код на стороне сервера был следующим:

    int serverPort = 11223;
    List<PrintWriter> clientsOut = new ArrayList<PrintWriter>();
    ServerSocket serverSocket = new ServerSocket(serverPort);
    System.out.println("Listening...");
    while(true) {
        try (
            Socket clientSocket = serverSocket.accept();
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        )
        {
            out.println("Hello from server");
            clientsOut.add(out);
            String ID = clientSocket.getInetAddress().getHostName();
            for (PrintWriter client : clientsOut)
            {
                client.println("user(" + ID + ") : connected");
            }

        } catch (Exception e) {
            System.out.print("ERROR : " + e.getMessage());
        }

Я понял, что никто, кроме нового подключенного клиента, не получает сообщение оСам был подключен. Проблема была в том, что выходные потоки были закрыты, потому что они были объявлены в круглых скобках ( ) после блока try, который автоматически закрывает их после блока try.

Я просто поместил кодпредставить в круглых скобках к фигурной скобке try и все работает, но у меня все выходные потоки подключенных пользователей открыты.

2 - Это хорошо?Должен ли я повторно открыть поток ввода-вывода каждого подключенного клиента при циклическом массиве только для отправки сообщения?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...