我在使用 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() 似乎无法识别它。那么我能用它做什么呢?
如果你不明白我的问题,你可以试试上面的代码,你就会明白我的意思。
Call flush()
从客户端写入服务器后,如下所示:
out.print(textToServer + "\r\n" ); // send to server
out.flush(); // here, it should get you going.
flush()
: 刷新输出流并强制写出任何缓冲的输出字节。 https://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html#flush()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)