Строка после \ n вообще не отображается в выводе системы

Итак, я делаю простую серверно-клиентскую программу, использующую TCP, как часть моего задания в колледже. Я уже создал его перед использованием UDP, и мне просто нужно переделать его с помощью TCP. Однако при кодировании я наткнулся на кое-что забавное. По-видимому, строки, которые я отправляю с сервера, содержащие \ n, будут отображать только часть строки до \ n. Все остальные подстроки, следующие после \ n, отображаться не будут. Я немного озадачен этим. Может быть, это как-то связано с моим кодом для его отправки?

Приведенный ниже код взят со стороны сервера.

P.S. Я попытался немного изучить это, и я не смог найти ничего, что касалось моей проблемы. Я пробовал использовать "% n", потому что видел, что это было предложено на нескольких форумах, но это не сработало.

if (clientMessage.equals("1234"))
{
    SendMessage(incoming, "Welcome.\nMenu:\n1. Check balance\n2. Deposit\n3. Withdraw\n4. Quit");
}

public static void SendMessage(Socket incoming, String message){
//9. Initialize String to send to client
//BufferedReader output = new BufferedReader(new InputStreamReader(System.in));
    String serverMessage;
    try {
        serverMessage = message;
        //10. Initialize PrintStream using getOutputStream() method of 
        //Socket
        PrintStream send = new PrintStream(incoming.getOutputStream());
        //11. Use println() method of PrintSteam to send data to client
        send.println(serverMessage);
    } catch (IOException ex) {
        Logger.getLogger(ATMTCPServer.class.getName()).log(Level.SEVERE, null, ex);
    }
}

промойте PrintStream, когда закончите

Federico klez Culloca 09.03.2018 16:50

попробуйте публичную статическую строку newline = System.getProperty ("line.separator");

OcelotcR 09.03.2018 16:51

Вы также можете создать свой PrintStream с опцией autoflush, чтобы он автоматически сбрасывался после каждого вызова println().

Ivan 09.03.2018 17:00

Не могли бы вы привести пример того, как использовать автозапуск в моем коде? Я никогда не слышал об этом, хахаха. Я попытался реализовать его в конструкторе для своего PrintStream, присвоив второму параметру значение «true», но это не решило проблему. Спасибо!

Bryant Tanadjaya 10.03.2018 10:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
73
1

Ответы 1

Итак, в конце концов, я обнаружил ошибку, которую совершил, от своего друга, который указал на нее. Судя по всему, ошибка была на стороне клиента. Я не знал, что BufferedReader.readLine() будет читать только одну строку. Вот почему подстрока после \n не отображалась. Впоследствии я столкнулся с несколькими другими проблемами, но с помощью моего друга я в конце концов решил проблемы и выполнил свое задание. Спасибо всем, кто оставил свои комментарии!

P.S. Я выложу код того, что я сделал для решения проблемы, ниже. Приведенный ниже код взят со стороны клиента. Мне не пришлось ничего менять на стороне сервера.

serverMessage = incoming.readLine();
String[] messages = serverMessage.split("----");
for(int i = 0; i < messages.length; i++){
    if (choice.equals("2") || choice.equals("3"))
    {
        System.out.print(messages[i]);
    }
    else
    {
        System.out.println(messages[i]);
    }
}

Другие вопросы по теме