* Сокетный клиент Java не обнаруживает сообщения сервера - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь запустить серверный сокет Java на удаленном хосте, который будет регулярно передавать сообщения (определяемые внешними процессами) всем подключенным клиентам.

Сокет сервера определяется как:

        ServerSocket serverSocket = (ServerSocket) ((ServerSocketFactory)ServerSocketFactory.getDefault()).createServerSocket(3050);

        while (true) {
            Socket socket = serverSocket.accept();
            remoteService.addSocket(socket);
        }

Который будет отслеживать соединения сокетов в списке массивов. Метод ниже будет вызываться всякий раз, когда необходимо отправить широковещательную рассылку:

public void broadcastMessage(String message){
    for (Socket socket : remoteService.getSockets()) {
        System.out.println("Sending message: " + message);
        PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
        printWriter.write(message);
    }
}

На стороне клиента настройка выглядит следующим образом:

        Socket socket =  (Socket) ((SocketFactory) SocketFactory.getDefault()).createSocket(serverHost,portNum);

        BufferedReader socketBufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        while (true) {
            String message = socketBufferedReader.readLine();
            if (message != null && message != "") {
                System.out.println("Message received: " + message);
            };
        }

Сервер правильно печатает Строка «Отправка сообщения» столько раз, сколько подключено клиентов, но ни один из процессов клиента ничего не печатает. Любая идея, как заставить клиентов правильно слушать поток ввода сокета?

1 Ответ

1 голос
/ 01 мая 2020

Метод PrintWrite.println () распечатает заданную строку и завершит строку. Использование ниже на стороне сервера работало:

public void broadcastMessage(String message){
    for (Socket socket : remoteService.getSockets()) {
        System.out.println("Sending message: " + message);
        PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
        printWriter.println(message);
    }
}
...