У меня возникли проблемы с использованием PrintWriter или любого другого потока вывода для отправки сообщения между сервером и клиентской программой. Это работает правильно, если я использую println("abc") для связи, но не работает, если я использую print("abc\r\n"), print("abc\n") или print("abc\r" ). Что я имею в виду под «это не работает», так это то, что readLine() не завершится, потому что кажется, что он не видит символ «новой строки» и все еще ожидает «\ r» или «\ n»
Чтобы было понятнее, я просто добавлю несколько кодов в следующее: Клиент:
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(1234);
} catch (IOException e) {
System.err.println("Could not listen on port: 1234.");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
}
System.out.println("Connected");
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String textFromClient;
textFromClient = in.readLine(); // read the text from client
System.out.println(textFromClient);
String textToClient = "Recieved";
out.print(textToClient + "\r\n"); // send the response to client
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
Сервер:
import java.net.*;
import java.io.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
try {
socket = new Socket("localhost", 1234);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host");
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection");
}
System.out.println("Connected");
String textToServer;
textToServer=read.readLine();
out.print(textToServer + "\r\n" ); // send to server
System.out.println(in.readLine()); // read from server
out.close();
in.close();
read.close();
socket.close();
}
}
Я хочу использовать print() + "\r\n" вместо println(), потому что серверная программа, которую я пишу, требует, чтобы сообщение, отправляемое с сервера клиенту, должно было содержать "\r\n" в конце, например. "это сообщение от сервера к клиенту\r\n". Я думаю, что println() - это то же самое, что и print("\r\n"), поэтому я не думаю, что мне следует использовать println() + "\r\n", иначе у него будет 2 новой строки. (Хотя я не знаю, как клиентская сторона будет читать с сервера, потому что меня просят просто написать только серверную программу. Они напишут клиентскую сторону, чтобы протестировать мою серверную программу.) Однако я должен отправлять сообщения, содержащие "\ r\n" в конце, но readLine(), кажется, не распознает его. Так что я мог сделать с ним?
Если вы не понимаете мой вопрос, вы можете попробовать приведенные выше коды, и вы поймете, что я имею в виду.