Итак, я делаю простую серверно-клиентскую программу, использующую 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);
}
}
попробуйте публичную статическую строку newline = System.getProperty ("line.separator");
Вы также можете создать свой PrintStream с опцией autoflush, чтобы он автоматически сбрасывался после каждого вызова println().
Не могли бы вы привести пример того, как использовать автозапуск в моем коде? Я никогда не слышал об этом, хахаха. Я попытался реализовать его в конструкторе для своего PrintStream, присвоив второму параметру значение «true», но это не решило проблему. Спасибо!




Итак, в конце концов, я обнаружил ошибку, которую совершил, от своего друга, который указал на нее. Судя по всему, ошибка была на стороне клиента. Я не знал, что 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]);
}
}
промойте
PrintStream, когда закончите