我一直在Java中使用围绕BufferedReader的while循环的问题。我正在用套接字做一些实验。使用BufferedReader卡在While循环中
我当前的代码:
InetAddress address = InetAddress.getByName(this.IP);
SocketAddress socketaddress = new InetSocketAddress(address, this.port);
Socket socket = new Socket();
socket.connect(socketaddress);
if(socket.isConnected()){
Executor.logger.info("Connection to proxy established!");
}
else {
Executor.logger.warning("Connection to proxy failed!");
socket.close();
return;
}
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String temp2;
while((temp2 = in.readLine()) != null){
Executor.logger.info("Running query says " + temp2);
}
但无论怎样我试过的代码就不会进步到下一行。它不会用任何东西给我的记录器发送垃圾邮件,它会突然停止并卡住。
这仅仅是客户端,我并不控制接收端服务器端。
我做错了什么?
感谢您提前提供任何帮助。
编辑
服务器是一个命令行接受与变量并返回,告诉你什么,你只是做的结果代码的命令。但是,当你第一次连接它时,会返回类似消息,空白行,消息,空白行这是当前被卡住的循环。
它在* readLine()方块上*因为它正在等待数据。连接没有关闭,所以'readLine()'不返回'null',但没有任何数据进来,所以它一直在等待数据到达。据推测,服务器正在等待你的一些输入,直到它返回更多的数据。您还需要另一个写入线程,以便您可以同时接收数据和发送数据。 – Kayaman
有没有什么办法来检测BufferedReader何时为空?我确实需要代码才能在构造函数中进行。 – Harieo
您应该使用像DataFetcher这样的线程化侦听器:https://sourceforge.net/p/tus/code/HEAD/tree/tjacobs/io/DataFetcher.java – ControlAltDel