我已經閱讀了幾篇與readLine()掛起有關的文章和問題。我不確定是否可以在服務器端(遠程位置)響應結束時手動添加NULL。據我所知,我可能無法控制它。Socket不返回NULL或 n ReadLine() - 已解決
<?xml version="1.0" encoding="utf-8"?>
<Response>
<Reply Status="OK" />
<Data attr="..." /> <-- BufferedReader hangs after this is printed.
</Response> <--- I'm assuming this has no "\n" or "null" so it keeps waiting
till the socket closes
我能做些什麼來解決這個問題?我不完全需要最後一行,但我不希望我的代碼繼續有例外。我使用Javascript,這是我的代碼的一部分。
if (socketForXML && socketForXML.isConnected()){
socketForXML.setSoTimeout(60000);
var command = new Packages.java.lang.String(theCommand);
var os = socketForXML.getOutputStream();
os.write(command.getBytes("UTF-8"));
os.flush();
log.info("sendXMLCommand - sent command : " + command);
//RECEIVE RESPONSE FROM SERVER - in STRING format
var inStream = socketForXML.getInputStream();
var reader = new Packages.java.io.InputStreamReader(inStream, "UTF-8");
var buffer = new Packages.java.io.BufferedReader(reader);
while((line = buffer.readLine()) != null) {
log.debug(line);
}
socketForXML.close();
}
我使用buffer.read()也試過,它會把我所有的ASCII碼爲/響應標籤,但之後,去年>將掛爲好。我試圖做與嘗試捕捉支票,但它仍然會等到插座關閉,並曾返回任何:(。
try{
if (buffer.read() < 0){
log.error("END OF FILE.");
}
catch(e) {
log.error("did not work.");
}
換句話說,你只想從服務器讀取一行?在那種情況下,擺脫循環。你不需要關閉任何東西。否則,這個答案沒有任何意義。 – EJP
@World:這是一個自我回答。它看起來不夠糟糕,無法刪除。 –