Помимо неправильной отправки ответа, как указал Кристиан Антонсен, проблема, скорее всего, заключается в том, что вы на самом деле не ждете и не читаете запрос, прежде чем ответить. Возможно, это не должно быть проблемой из-за буферизации, но даже в этом случае вполне вероятно, что ваш сервер просто «слишком быстр», отправляя ответ и закрывая сокет до того, как Chrome сможет отправить запрос, вызывая, таким образом, «соединение». Сброс "проблема, которую он сообщает.
Попробуйте реализовать сервер, который немного более полон. Вот простой пример:
public void readRequest(Socket client) throws IOException {
Reader raw = new InputStreamReader(client.getInputStream(), "US-ASCII");
BufferedReader reader = new BufferedReader(raw);
while(true) {
String line = reader.readLine().trim();
if(line.equals(""))
break;
}
}
public void writeResponse(Socket client) throws IOException {
String lol = "<html>hi</html>";
PrintStream writer = new PrintStream(client.getOutputStream());
writer.println("HTTP/1.1 200 OK");
writer.println("Content-Type: text/html");
writer.println();
writer.println(lol);
writer.flush();
}
public void serveClient(Socket client) throws IOException {
try {
readRequest(client);
writeResponse(client);
System.out.println("LOL works!");
} finally {
client.close()
}
}
public void serve() {
try{
ServerSocket socket = new ServerSocket(80);
while(true) {
Socket client = socket.accept();
serveClient(client);
}
}catch(IOException e) {
e.printStackTrace();
}
}
(Обратите внимание, что я не пробовал код или что-то еще, поэтому нет гарантии, что он будет скомпилирован как есть.)