【发布时间】:2016-09-27 17:57:16
【问题描述】:
我目前正在学习 Java 网络编程。在我的一个程序中,我只有一个发送客户端消息的 EchoServer。但我在客户端认识到 Printwriter.write() 方法只是在我关闭编写器时发送,而 .println() 方法工作正常。我也尝试过使用和不使用自动刷新。
作品:
public static void main(String[] args) {
System.out.println("Simple Echo Client");
try{
System.out.println("Waiting for Connection ...");
InetAddress localAdress = InetAddress.getLocalHost();
try(Socket clientSocket = new Socket(localAdress,6000);
PrintWriter out =new PrintWriter(clientSocket.getOutputStream(),true);
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))){
System.out.println("Connected to Server");
Scanner scanner = new Scanner(System.in);
while(true){
System.out.print("Enter text: ");
String inputLine = scanner.nextLine();
if("quit".equals(inputLine)){
break;
}
out.println(inputLine);
String response = br.readLine();
System.out.println("Server response" + response);
}
}
}catch(IOException ex){
ex.printStackTrace();
}
}
不起作用:
public static void main(String[] args) {
System.out.println("Simple Echo Client");
try{
System.out.println("Waiting for Connection ...");
InetAddress localAdress = InetAddress.getLocalHost();
try(Socket clientSocket = new Socket(localAdress,6000);
PrintWriter out =new PrintWriter(clientSocket.getOutputStream(),true);
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))){
System.out.println("Connected to Server");
Scanner scanner = new Scanner(System.in);
while(true){
System.out.print("Enter text: ");
String inputLine = scanner.nextLine();
if("quit".equals(inputLine)){
break;
}
out.write(inputLine);
String response = br.readLine();
System.out.println("Server response" + response);
}
}
}catch(IOException ex){
ex.printStackTrace();
}
}
有人可以向我解释为什么会这样吗?
【问题讨论】:
-
在提交的答案之上,您可能有兴趣将 DataFetcher 与您的套接字一起使用。 DataFetcher 是一个具有回调(即监听器)功能的异步 InputStream 阅读器:sourceforge.net/p/tus/code/HEAD/tree/tjacobs/io/…
标签: java networking printwriter