我已经阅读了几篇与 readLine() 挂起相关的文章和问题。我不确定是否可以在服务器端的响应末尾手动添加 NULL(它是远程位置)。据我所知,我可能无法控制它。
<?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() ,它会为我获取 /Response 标记的所有 ASCII 数字,但在最后一个 > 之后它也会挂起。我尝试使用 try catch 进行检查,但它仍然会等到套接字关闭并且没有返回任何内容:(。
try{
if (buffer.read() < 0 ){
log.error("END OF FILE.");
}
catch(e) {
log.error("did not work.");
}