Я создаю сокет Java в Javascript, отправляю HTTP-запрос и получаю правильный ответ, но, похоже, я не могу обнаружить EOF или сервер, закрывающий сокет в конце. Что я делаю не так? Проблема в том, что мы никогда не выходим из самого внешнего цикла while - сервер прекращает передачу и (предположительно) закрывает свой конец соединения, но Receiver.read() никогда не возвращает -1, и все методы сокета возвращают состояние, соответствующее тому, что сокет все еще подключен. .
var s = new java.net.Socket("www.google.com",80);
var sender = new java.io.PrintStream(s.getOutputStream());
var receiver = s.getInputStream();
sender.print("GET / HTTP/1.0\r\n\r\n");
sender.flush();
s.shutdownOutput();
var response = '';
var eof = 0;
while( !eof && s.isConnected() && s.isBound() && !s.isClosed() && !s.isInputShutdown() )
{
if( receiver.available() )
{
while( receiver.available() )
{
var i = receiver.read();
if( i == -1 ) { eof = 1; }
else { response += String.fromCharCode(i); }
}
// at this point response does contain the expected HTTP response
}
}
// in case remote end closed the socket before we got a chance to read all the bytes from it
// ...but this is never reached!
while( receiver.available() )
{
response += String.fromCharCode(receiver.read());
}
alert( response );