Java PrintWriter赢得';不写
我有以下问题。 我编写了一个简单的Echo服务器和Echo客户端,但问题是,在服务器的循环中,我从缓冲读取器读取数据,程序卡住了,无法写入Java PrintWriter赢得';不写,java,network-programming,bufferedreader,printwriter,Java,Network Programming,Bufferedreader,Printwriter,我有以下问题。 我编写了一个简单的Echo服务器和Echo客户端,但问题是,在服务器的循环中,我从缓冲读取器读取数据,程序卡住了,无法写入 import java.net.*; import java.util.*; import java.io.*; public class SimpleServer { public static void main(String[] args) { System.out.println("Dies ist ein simpler Ech
import java.net.*;
import java.util.*;
import java.io.*;
public class SimpleServer {
public static void main(String[] args) {
System.out.println("Dies ist ein simpler Echo Server");
int port = 6000;
try {
ServerSocket server = new ServerSocket(port);
//server.setSoTimeout(30000);
System.out.println("Warte auf anfrage");
Socket client = server.accept();
InputStream is = client.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);
String message = null;
while ((message = reader.readLine())!=null) {
System.out.println("Nachricht vom Client "+message);
}
OutputStream os = client.getOutputStream();
PrintWriter writer = new PrintWriter(os);
System.out.println(message);
writer.println(message);
writer.flush();
writer.close();
} catch(IOException e) {
e.printStackTrace();
} // end of try
} // end of main
} // end of class SimpleServer
但是当我把.println()
和.flush()
放在循环中时,一切都很好
import java.net.*;
import java.util.*;
import java.io.*;
public class SimpleServer {
public static void main(String[] args) {
System.out.println("Dies ist ein simpler Echo Server");
int port = 6000;
try {
ServerSocket server = new ServerSocket(port);
//server.setSoTimeout(30000);
System.out.println("Warte auf anfrage");
Socket client = server.accept();
InputStream is = client.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);
OutputStream os = client.getOutputStream();
PrintWriter writer = new PrintWriter(os);
String message;
while ((message = reader.readLine())!=null) {
System.out.println("Nachricht vom Client "+message);
writer.println(message);
writer.flush();
}
writer.close();
} catch(IOException e) {
e.printStackTrace();
} // end of try
} // end of main
} // end of class SimpleServer
我的问题是,为什么它会陷入循环 在发送任何内容之前,您一直在读取输入信息,直到流结束。套接字上的流结束仅在对等方关闭连接时发生。对等方尚未关闭连接,因为他想从中读取您的回复
你应该在阅读时重复每一行,而不是试图把它们全部组合起来,然后在一大块中重复它们。除了无法工作之外,您的技术还浪费时间和空间。谢谢您的回答。是的,我希望流在为空时给出null。当然,这是没有意义的,但是阅读文本的长度和行数是可变的。是否有类似的
扫描仪
方法hasNext()
。要提供当读取所有文本时,服务器将退出循环?