我一直在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