Я создаю сокет Java в Javascript, отправляю HTTP-запрос и правильно получаю ответ, но мне кажется, что я не могу обнаружить EOF или сервер, закрывающий сокет в конце. Что я делаю неправильно? Проблема заключается в том, что мы никогда не покидаем самый внешний цикл while - сервер прекращает передачу и (предположительно) закрывает свой конец соединения, однако receive.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 );